喜欢下载东西的人应该很有体会,每次下载过来的文件名往往是比较有规律,但是那个规律却不是你想要的规律,一个个去改名很麻烦,以下我总结了几个常用的用于改名的批处理。可以提建议,为了防止大家误操作,建议大家先在新建文件夹尝试成功后再对所需文件进行修改,而不要急着马上使用。
1、批量修改扩展名
如把当前文件夹的*.jpg全部改为*.rar。
@ECHO OFF set listFile=list.tmp del "%listFile%" /q 1>nul 2>nul
dir *.jpg /a /b>>"%listFile%" FOR /F "tokens=*" %%a IN ( 'more
"%listFile%"' ) DO ( ren "%%a" "%%~na.rar" ) del "%listFile%" /q
1>nul 2>nul PAUSE
2、前面插入(例如要给所有歌曲名前面添加歌手的姓名) @ECHO OFF set listFile=list.tmp del
"%listFile%" /q 1>nul 2>nul dir *.mp3 /a /b>>"%listFile%"
FOR /F "tokens=*" %%a IN ( 'more "%listFile%"' ) DO ( ren "%%a"
"歌手名%%a" ) del "%listFile%" /q 1>nul 2>nul PAUSE
3、后面添加(例如要给所有文件名后面添加一个网站的网址)
@ECHO OFF set listFile=list.tmp del "%listFile%" /q 1>nul
2>nul dir *.mp3 /a /b>>"%listFile%" FOR /F "tokens=*" %%a IN (
'more "%listFile%"' ) DO ( ren "%%a" "%%~naWWW WWW Com%%~xa" )
del "%listFile%" /q 1>nul 2>nul PAUSE
4、删除文件名中的相同部分(例如删除所有文件名中的歌手名)
@ECHO OFF set deleteString=歌手名 set listFile=list.tmp
del "%listFile%" /q 1>nul 2>nul dir *.mp3 /a
/b>>"%listFile%" FOR /F "tokens=*" %%a IN ( 'more "%listFile%"'
) DO ( SETLOCAL ENABLEDELAYEDEXPANSION set newFileName=%%a set
newFileName=!newFileName:%deleteString%=! ren "%%a" "!newFileName!"
ENDLOCAL ) del "%listFile%" /q 1>nul 2>nul PAUSE
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 /b>>tmp.txt
rem 用for命令来读取那个由dir命令生成的列表文件 FOR /F "tokens=*" %%a IN ( 'more
tmp.txt' ) DO ( rem 用Setlocal来启用环境变量延迟功能 Setlocal
EnableDelayedExpansion
rem 取得路径包括了最后一个斜线\ set tempPath=%%~dpa
rem 把路径中的最后一个斜线去掉 set tempPath=!tempPath:~,-1!
rem 在for命令中来扩展取得路径名 FOR %%A IN ( "!tempPath!" ) DO (
rem 扩展取得上级目录名 set filePath=%%~nA rem 新的文件名为: 上级目录名文件名 set
new_name=!filePath!%%~nxa
ren "%%a" "!new_name!" ) ENDLOCAL ) rem 删除临时文件 del
tmp.txt /q 1>nul 2>nul pause
6、批量重命名,删除文件名中相同的网站名。
昨天晚上在网上下载了一个压缩包,里面是邓丽君的歌曲,有50多首。那些歌曲的文件名的后面都加了那个网站的网址,看起来很不爽,大致为
歌曲www.xxx.com.mp3
所以我要把后面的www.xxx.com去掉
如果一个一个去的话,那必然很麻烦,所以就用批处理了,以下的批处理就是用来实现这个功能的。
因为我这里www.xxx.com.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 1>nul 2>nul 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 "%%a" "!strTemp:~0,-14!.mp3" ) GOTO :EOF
附:批处理读取文本常用命令
读取文本 用 for /f 文本名有空格 用 usebackq 文本内容有空格并不要前面的 用 delims=] 扩展到 路径
和 文件名 用 %%~dpn1
例子:
for /f "delims=" %%i in (1.txt) do ( set "str=%%~dpi" set
str=!str:*]=! echo !str:~,-1! %%~ni ) pause
|