找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28853|回复: 10

[文件操作] 批处理如何实现提取文件名中指定位数的数字来重命名文件?

[复制链接]
发表于 2016-6-17 09:36:37 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-6-17 14:02 编辑

目录下大量的文件,文件名格式类似
我的文件1_12345678.zip
我的文件2_22342345.doc
34232345_又一个文件.chm

需要提取8位数字将文件更名,后缀不变
12345678.zip
22342345.doc
34232345.chm
发表于 2016-6-17 13:18:42 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d ^| findstr "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"') do (
  4.     for /f %%j in ('echo "%%~nxi" ^| grep -Po "\d{8}"') do (
  5.         set "NewName=%%j%%~xi"
  6.     )
  7.     ren "%%i" "!NewName!"
  8. )
复制代码
 楼主| 发表于 2016-6-17 14:32:41 | 显示全部楼层
多谢楼上,grep是第三方命令,有没有不用第三方命令的办法呢?
发表于 2016-6-17 15:02:04 | 显示全部楼层
第三方可用ren2
ren2 -f ".*(\d{8}).*(\..*)" "$1$2"
发表于 2016-6-17 21:21:25 | 显示全部楼层
考虑到set /a会自动忽略非数字,可用
set a=&set /a a=b
if "%a%" == "%b%" echo %b%是数字
发表于 2016-6-17 23:35:43 | 显示全部楼层
水一个
  1. @echo off&(color 0e&chcp 936&setlocal enabledelayedexpansion)2>nul
  2. for /f "delims=" %%i in ('dir/a-d/s/b/l/on ".\*.*"')do if /i not "%%~fi"=="%~f0" (
  3. set "name_="%%~ni""&&set "name=!name_:_=";"!"
  4. for %%j in (!name!)do (set "n=%%j"&set "num="
  5.   for /l %%n in (0,1,8192)do if /i not "!n:~%%n,1!"=="" (
  6.    for /l %%o in (0,1,9)do if /i "!n:~%%n,1!"=="%%o" set/a "num+=1"
  7.   )
  8.   if !num! gtr 7 ren "%%~fi" "%%~j%%~xi"
  9. )
  10. )
  11. pause
复制代码
发表于 2016-6-19 01:23:43 | 显示全部楼层
  1. PowerShell -c "dir *[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*.*|ren -newName{$_.Name -replace '.*?(\d{8}).*(\..+)$','$1$2'}"
复制代码
发表于 2016-6-19 04:38:42 | 显示全部楼层
本帖最后由 ttszuo 于 2016-6-19 06:02 编辑

借用2楼的代码
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /a-d ^| findstr "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"') do (
  4.     for /f "tokens=1,2 delims=^_" %%a in ('echo.%%~ni') do (
  5.         echo.%%a|findstr /be "[0-9]*" >nul && move "%%~nxi" "%%a%%~xi"|| move "%%~nxi" "%%b%%~xi"
  6.     )
  7. )
  8. pause
复制代码
也可以这个
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /a-d ^| findstr "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"') do (
  4.     for /f "tokens=1,2 delims=^_" %%a in ('echo.%%~ni') do (
  5.         if 1%%a gtr 99999999 (move "%%~nxi" "%%a%%~xi")  else (move "%%~nxi" "%%b%%~xi")
  6.     )
  7. )
  8. pause
复制代码
借用5楼的判断是否是数字
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /a-d ^| findstr "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"') do (
  5.     for /f "tokens=1,2 delims=^_" %%a in ('echo.%%~ni') do (
  6.             set /a num=%%a
  7.            if "!num!"=="%%a" (move "%%~nxi" "%%a%%~xi")  else (move "%%~nxi" "%%b%%~xi")
  8.     )
  9. )
  10. pause
复制代码
 楼主| 发表于 2016-6-20 10:23:45 | 显示全部楼层
楼上的脚本可用,非常感谢,我用python写了个脚本

  1. import os, os.path, re

  2. ress = re.compile('\d{8}')

  3. # 批量改名
  4. def batchrename(root):
  5.     for parent,dirnames,filenames in os.walk(root):
  6.         for name in filenames:
  7.             if len(re.findall(ress, name))>0:
  8.                 ss=re.findall(ress, name)[0]
  9.                 print(os.path.join(parent, ss+name[name.rfind('.'):]))
  10.                 os.rename(os.path.join(parent, name), os.path.join(parent, ss+name[name.rfind('.'):]))

  11. if __name__ == '__main__':      
  12.     batchrename('.')
复制代码
发表于 2016-6-20 22:45:51 | 显示全部楼层
楼上各位大大好厉害,菜鸟学习了~~
发表于 2016-7-4 11:16:57 | 显示全部楼层
  1. //&cls&(dir /a-d/b |findstr "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]")|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. while(!WScript.StdIn.AtEndOfStream){
  3.     var f = (new ActiveXObject('Scripting.Filesystemobject')).GetFile(WScript.StdIn.ReadLine());
  4.     var newname = f.Name.replace(/.*?(\d{8}).*(\.[^\.]+)$/, '$1$2');
  5.     try{f.Name = newname}catch(e){}
  6. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 06:31 , Processed in 0.034202 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表