批处理对文件批量重命名
用批处理对文件批量重命名 
文章转自: 忆林子
喜欢下载东西的人应该很有体会,每次下载过来的文件名往往是比较有规律,但是那个规律却不是你想要的规律,一个个去改名很麻烦,以下我总结了几个常用的用于改名的批处理。可以提建议,为了防止大家误操作,建议大家先在新建文件夹尝试成功后再对所需文件进行修改 ,而不要急着马上使用。 
1、批量修改扩展名 
如把当前文件夹的*.jpg全部改为*.rar。 
@ECHO OFF
set p
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 p
del "%listFile%" /q 1>nul 2>nul
dir *.mp3 /a /b>>"%listFile%"
FOR /F "tokens=*" %%a IN (
'more "%listFile%"'
qq短信发) DO (
ren "%%a" "歌手名%%a"
)
del "%listFile%" /q 1>nul 2>nul
PAUSE
3、后面添加(例如要给所有文件名后面添加一个网站的网址)
@ECHO OFF
set p
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 p
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 \  就要重命名为 ,按照它的要求,我们可以分析一下,重命名的命令就是
ren 然后参数为 ren 源文件名 新文件名,即上面的单个进行重命名的话,那就是
ren "d:\testPath\" ""
既然知道了单个怎么命名,那批量也应该能知道了吧。
我们知道在批处理中要批量处理的话,那肯定是少不了用for命令的。
现在我们把他的要求分解成两部分
1、先用dir命令把所有要进行重命名的文件的全路径列出来发送到一个临时的文本文件。
(供下面的for语句来读取)
2、用for命令来读取那个由dir命令生成的列表文件
a、在循环的过程中 取得上级文件夹名
b、 取得文件名
c、 ren "源文件名" "上级文件夹名文件名"
面就是伪代码,接下来是批处理的实现代码 
郑恺喜欢baby吗
@echo off 
rem 生成临时列表文件
dir d:\*.txt /s /a-d /b>& 
rem 用for命令来读取那个由dir命令生成的列表文件
FOR /F "tokens=*" %%a IN (
''
) 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 删除临时文件
/q 1>nul 2>nul
pause 
6、批量重命名,删除文件名中相同的网站名。 
昨天晚上在网上下载了一个压缩包,里面是邓丽君的歌曲,有50多首。那些歌曲的文件名的后面都加了那个网站的网址,看起来很不爽,大致为 
歌曲 p3 
所以我要把后面的 去掉 
如果一个一个去的话,那必然很麻烦,所以就用批处理了,以下的批处理就是用来实现这个功能的。 
因为我这里 p3 即最后的字符个数为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
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 
Powered by 无名小鬼 wumingxiaogui.blog.163