批处理使用技巧
用批处理对文件批量重命名用批处理对文件批量重命名 1 1、批量修改扩展名、批量修改扩展名 如把当前文件夹的*.jpg 全部改为*.rar。 @ECHO OFF set listFile=list.tmp del “%listFile%“ /q 1nul 2nul dir *.jpg /a /b“%listFile%“ FOR /F “tokens=*“ %%a IN ( more“%listFile%“ ) DO ( ren “%%a“ “%%~na.rar“ ) del “%listFile%“ /q1nul 2nul PAUSE 2 2、前面插入、前面插入( (例如要给所有歌曲名前面添加歌手的姓名例如要给所有歌曲名前面添加歌手的姓名) ) @ECHO OFF set listFile=list.tmp del“%listFile%“ /q 1nul 2nul dir *.mp3 /a /b“%listFile%“ FOR /F “tokens=*“ %%a IN ( more “%listFile%“ ) DO ( ren “%%a““歌手名%%a“ ) del “%listFile%“ /q 1nul 2nul PAUSE 3 3、后面添加、后面添加( (例如要给所有文件名后面添加一个网站的网址例如要给所有文件名后面添加一个网站的网址) ) @ECHO OFF set listFile=list.tmp del “%listFile%“ /q 1nul2nul dir *.mp3 /a /b“%listFile%“ FOR /F “tokens=*“ %%a IN ( more “%listFile%“ ) DO ( ren “%%a“ “%%~naWWW WWW Com%%~xa“ ) del “%listFile%“ /q 1nul 2nul PAUSE 4 4、删除文件名中的相同部分、删除文件名中的相同部分( (例如删除所有文件名中的歌手名例如删除所有文件名中的歌手名) ) @ECHO OFF set deleteString=歌手名 set listFile=list.tmp del “%listFile%“ /q 1nul 2nul dir *.mp3 /a/b“%listFile%“ FOR /F “tokens=*“%%aIN ( more “%listFile%“ ) DO ( SETLOCAL ENABLEDELAYEDEXPANSION set newFileName=%%a setnewFileName=!newFileName:%deleteString%=! ren “%%a“ “!newFileName!“ ENDLOCAL ) del “%listFile%“ /q 1nul 2nul PAUSE 5 5、把文件名批量重命名为上级目录名文件名的形式,例如、把文件名批量重命名为上级目录名文件名的形式,例如 d:\testPath\fatherPath\test.txt 就要重命名为 fatherPathtest.txt,按照它的要求,我们可以分析一下,重命名的 命令就是 ren 然后参数为 ren 源文件名新文件名,即上面的单个进行重命名的话,那就是 ren “d:\testPath\fatherPath\test.txt““fatherPathtest.txt“ 既然知道了单个怎么命名,那批量也应该能知道了吧。 我们知道在批处理中要批量处理的话,那肯定是少不了用 for 命令的。 现在我们把他的要求分解成两部分 1、 先用 dir 命令把所有要进行重命名的文件的全路径列出来发送到一个临时的文 本文件。 (供下面的 for 语句来读取) 2、用 for 命令来读取那个由 dir 命令生成的列表文件 a、在循环的过程中取得上级文件夹名 b、取得文件名 c、ren “源文件名“ “上级文件夹名文件名“ 上面就是伪代码,接下来是批处理的实现代码 @echo off rem 生成临时列表文件 dir d:\*.txt /s /a-d /btmp.txt rem 用 for 命令来读取那个由 dir 命令生成的列表文件 FOR /F “tokens=*“ %%a IN ( moretmp.txt ) DO ( rem 用 Setlocal 来启用环境变量延迟功能 SetlocalEnableDelayedExpansion rem 取得路径包括了最后一个斜线\ set tempPath=%%~dpa rem 把路径中的最后一个斜线去掉 set tempPath=!tempPath:~,-1! rem 在 for 命令中来扩展取得路径名 FOR %%A IN ( “!tempPath!“ ) DO ( rem 扩展取得上级目录名 set filePath=%%~nA rem 新的文件名为: 上级目录名文件名 setnew_name=!filePath!%%~nxa ren “%%a“ “!new_name!“ ) ENDLOCAL ) rem 删除临时文件 deltmp.txt /q 1nul 2nul pause 6 6、批量重命名,删除文件名中相同的网站名。、批量重命名,删除文件名中相同的网站名。 昨天晚上在网上下载了一个压缩包,里面是邓丽君的歌曲,有50多首。那些歌曲 的文件名的后面都加了那个网站的网址,看起来很不爽,大致为 歌曲 .mp3 所以我要把后面的 去掉 如果一个一个去的话,那必然很麻烦,所以就用批处理了,以下的批处理就是用 来实现这个功能的。 因为我这里 .mp3即最后的字符个数为14个,所以我只要取前面的 文件名,不取这最后的14个,然后再后面加上.mp3就可以了。 即 %fileName:~0,-14% 这样的形式就可以取到了。 上面是说原理,下面就是我的批处理,批处理代码不是很多,我就不做详细说明 了,有兴趣的朋友自己可以看看,也可以根据这个修改成自己需要的批处理。 @ECHO OFF COLOR 0a rem 调用初始化部分代码 CALL :initEnv rem 删除临时文件 CALL :delTmpFiles rem 生成列表保存在临时文件中(重命令时根据这个列表来进行命名) CALL :madeList%tmpFile% rem 调用主模块(读取列表,进行重命名) CALL :main rem 删除临时文件 CALL :delTmpFiles PAUSE EXIT rem 初始化 :initEnv set tmpFile=tmp.txt GOTO :EOF rem 删除临时文件 :delTmpFiles del %tmpFile% /q 1nul 2nul GOTO:EOF rem 生成列表文件 :madeList dir *.mp3 /a /b goto :EOF rem 主模块(重命名) :main SETLOCAL ENABLEDELAYEDEXPANSION FOR /F“tokens=*“ %%a IN ( more %tmpFile% ) DO ( set strTemp=%%a ren “