如何在DOS下批量修改文件名?批处理修改文件名称一些见解

【如何在DOS下批量修改文件名?批处理修改文件名称一些见解】如果我们需要使用批处理命令批量修改文件名,首先需要确定这些文件是被命名为怎么样的格式,笔者总结一些网络上的知识,做了一些例子给大家看一下,文末有一些变量和参数介绍 。

如何在DOS下批量修改文件名?批处理修改文件名称一些见解

文章插图
今天要批量重命名一些文件,(即:目录FILE下有很多子目录file1,file2,file3……filen子目录中都有一个文件aaa.jpg,现要实现aaa.jpg重名为带子目录的名称,如file1下面的命名为file1.jpg),想到DOS处理,网上找了些现成脚本,没达到预期的目的,一时恼火,就小补了下DOS相关知识,包括基本命令,重点研究了下批量处理命令 。
如何在DOS下批量修改文件名?
方法一的思路与方法二大致相同,只不过在获取完整路径的时候,换用了效率更高的 for /r 语句,并用一个变量var来获取文件所在文件夹的完整路径,通过判断var是否经过赋值来判断当前处理的音乐文件是否位于同一目录下,因为直接用 %%~dpa 获取到的字符串最后有一个反斜杠,所以,第二个for语句中,用 !var:~,-1! 把最后的反斜杠去掉了(在for语句内部,如果要 引用已经发生了改变的变量,必须使用变量延迟功能,也就是最开始的 setlocal 语句),后面的思路和方法二的一样 。其实,方法一的代码大可不必判断当前处理的文件与上一次处理的文件是否位于同一目录下,因为 for /r 的时候,会获得文件的完整路径,只需要对完整路径直接进行操作就可以了,可以借鉴随风的做法,在 %%~dpa 的时候,直接在最后加上一个点号,可以使得效率进一步提升 。
方法一代码:
01@echo off &setlocal enabledelayedexpansion02for /r %%a in (aaa.jpg) do (if not defined %%~dpa set "var=%%~dpa"&set03"%%~dpa=a"04for %%i in ("!var:~,-1!")doren "%%~fa" "%%~ni.jpg")05pause复制代码@echo off &setlocal enabledelayedexpansionfor /r %%a in (aaa.jpg) do (if not defined %%~dpa set "var=%%~dpa"&set"%%~dpa=a"for %%i in ("!var:~,-1!")doren "%%~fa" "%%~ni.jpg")pause方法二用 dir /a-d /b /s 来获取完整路径名,放到for语句中来解析完整路径字符串,用 %%~dpa. 来获取音乐文件所处的文件夹完整路径(这里使用了一个小技巧:在字符串最后添加一个点号,从而使得for语句的%%~ni把文件夹名当做文件名来处理,我直接运行以上脚本发现一直出问题,后来发现先显示下%%~dpa. 即在ren 前加上echo "%%~dpa." 再执行脚本就OK了,具体原因不明,望高手解答),再用 %%~ni 获取文件夹名,用ren来实现改名,%%~nxi 获取原文件完整的文件名和后缀名 。
方法二代码:
01@echo off02for /f "delims=" %%i in ('dir /a-d /b /s D:1*.jpg') do (ren "%%i""%%~nxi" )03pause复制代码@echo offfor /f "delims=" %%i in ('dir /a-d /b /s D:1*.jpg') do (ren "%%i""%%~nxi" )pause基本格式(这里写的是在命令行里用的格式,如果是在批处理中,需要把其中%再多加个%形成%%):
for /参数 %变量 in (集) do 命令
注:上面除中文的以外,其余的是按它的格式要求书写的,大小写都行 。
参数:FOR分四种参数 D L R F,并且有的参数还可附加另外的选项下面会分别介绍
变量:(记住如果是在批处理中使用for命令时,变量前的%需改为%%)这个变量名是由单个字母组成且区分大小写(原帮助是这么说的,实际运用中用单个数字作为变量名试过证明也可行),如%B和%b代表的是不同的变量 。
一、参数 /d
for /d %%变量 in (集) do 命令
/d 参数是指定仅对目录而不是文件执行的for命令 。
for /d %a in (c:*.*) do @echo %a
二、参数 /R
/R参数之后还可带盘符及路径

推荐阅读