打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用批处理对文件批量重命名

喜欢下载东西的人应该很有体会,每次下载过来的文件名往往是比较有规律,但是那个规律却不是你想要的规律,一个个去改名很麻烦,以下我总结了几个常用的用于改名的批处理。可以提建议,为了防止大家误操作,建议大家先在新建文件夹尝试成功后再对所需文件进行修改,而不要急着马上使用。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
bat批量修改文件名
批处理命令 删除文件,重命名文件
电脑慢怎样彻底清理电脑系统垃圾
批处理将文件重命名为文件修改时间(精确到秒)
DOS基本命令
dos处学
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服