批处理批量更改文件名称

来源:互联网 发布:演唱会市场怎样 知乎 编辑:程序博客网 时间:2024/05/17 11:36

昨天有同学让我帮忙搞一个小程序,由于手头没有IDE编辑器,只好用记事本写里个批处理。

处理效果是这样的,批量更改指定类型的文件名称(数字+"."+其他文本+后缀)


文件名称格式类似:

123456.文件.txt

10086.abc.txt

123.123.txt

100.aaa.rar

200.bbb.jpg

300.ccc.bmp

400.ddd.mp3

文件1.jpg

文件2.jpg

文件3.jpg

123.jpg

456.jpg


处理结果:

文件.txt

abc.txt

123.txt

aaa.rar

bbb.jpg

ccc.bmp

ddd.mp3

文件1.jpg

文件2.jpg

文件3.jpg

123.jpg

456.jpg

具体代码如下

@echo offecho 此BAT用于批量更改文件名称echo 使用方法:echo 请将BAT放到要更改名称文件的文件夹中echo BAT会枚举当前目录下指定后缀的文件echo 不会处理子目录中的文件echo 执行完成的文件存放在当前目录的子目录“新文件”中Setlocal ENABLEDELAYEDEXPANSION  ::启用命令扩展 %~d0::移动到当前盘符cd %cd%::移动到当前目录set backdir="新文件"if not exist %backdir% md %backdir%::新建一个文件夹,名字为新文件set /a pathlen=0set mystr=%cd%for /l %%i in (0,1,1000) do if "!mystr:~%%i,1!"=="" set /a pathlen=%%i && goto :strlenendfor1:strlenendfor1set /a pathlen+=1::计算目录路径字符长度echo 准备处理文件set /p hou=请输入处理文件后缀(如txt,默认为*,直接回车即可):::输入后缀if "%hou%" == "" set hou=*::后缀默认为*if "%1"=="" goto SearchFile::判断是否有输入参数,如果没有默认枚举工作目录:CheckArg::检查当前参数段if "%1"=="" goto End::如果当前参数为空则退出批处理cd %1>nul 2>nul && cd.. && goto SearchFile::检查当前参数是目录还是文件,是目录则跳到SearchFile段dir %1>nul 2>nul || goto error::检查当前参数是否为有效文件,否则跳到Error段set file=%1::设置file变量为当前参数call :Command::跳转Command段:NextPar::下个参数段shift /1::下个参数移至当前参数goto CheckArg::跳转CheckArg段:SearchFile::枚举目录段for /r %%i in (*.%hou%) do set file=%%i && call :Command::枚举目录中指定类型的文件goto NextPar::跳转NextPar段:Command::命令段set /a strlen=0set mystr=%file%set str=%file%for /l %%i in (0,1,1000) do if "!mystr:~%%i,1!"=="" set /a strlen=%%i && goto :strlenendfor2:strlenendfor2set /a strlen-=%pathlen%set file=!str:~-%strlen%!set /a strlen-=1set file=!file:~0,%strlen%!::去掉前面的路径::这里取得文件名set temp=%file%set ch1=\set /a num=0:jnext1if not "%temp%"=="" (set /a num+=1if "!temp:~0,1!"=="%ch1%" goto jlast1set "temp=%temp:~1%"goto jnext1)set /a num=0::没有找到字符,表明文件名符合要求goto jixuchuli::跳到继续处理:jlast1goto fileisok::文件不符合要求,跳出不处理:jixuchuli::继续处理set temp=%file%set "temp=%temp:~-4%"if "%temp%" == ".bat" goto fileisok::不处理BAT文件echo ----------echo 处理:%file%set /a nums=0set temp=%file%set chl=.:strnextaif not "%temp%"=="" (set /a nums+=1if "!temp:~0,1!"=="%chl%" goto strlastaset "temp=%temp:~1%"goto strnexta)set /a nums=0:strlasta::取得.在字符串中的位置set /a nums=%strlen%-%nums%set temp=%file%set "temp=!temp:~-%nums%!"::echo %temp%::去除.后面的文本echo %file% | findstr "^[0-9][0-9]*\...*\...*" && (::需要处理文件echo yescopy /y "%file%" "%cd%\新文件\"ren "%cd%\新文件\%file%" "%temp%") || (copy /y "%file%" "%cd%\新文件\"):fileisok::处理命令完成exit /b::返回调用前的指令:Error::参数错误段echo %1 is not a valid argument!::输出参数错误提示pause::暂停程序goto NextPar::继续下个参数:Endecho 操作完成pause


将代码复制后,保存到txt文件,改后缀为.bat,然后把bat放到要批量更改的文件的目录中,能够批量去除文件名称中 数字.文本.后缀 前面的数字


0 0
原创粉丝点击