Windows下的通过命令行批量重命名文件

        今天在工作时遇到了一个情况,通过高速扫描仪扫描的文件是以图片的形式保存到本地硬盘上的,但是扫描仪给图片命的名就很混乱,并不是我想要的。作为一个强迫症,于是就想到了手动把这些名字改过来。但是这一整个文件夹6、700张图片,一个一个地F2去重命名工作了也是蛮吓人的。。。

        思考了一下,Windows自带的CMD不是正好有重命名文件的功能嘛?使用ren命令就行啦。所以说,如果我能在当前存放图片们的文件夹内运行一个循环,让它能够遍历当前文件夹下所有文件,然后做ren操作,理论上来讲就能完成文件的批量重命名了。

        说做咱就做!结合以前对CMD命令行的一些了解,加上查询到的相关语法,一个简单的文件批量重命名脚本便写好了。

setlocal ENABLEDELAYEDEXPANSION
for /r %%i in (.) do (
        set n=1000
        for /f "delims=" %%a in (' dir /b "%%i\*.jpg" 2^>nul ') do (
                set /a n+=1
                ren "%%i\%%a" "%filename%"!n:~1!%%~xa
        )
)

        这里解释一下:

 

setlocal ENABLEDELAYEDEXPANSION

是“开启延迟环境变量扩展”的意思。顾名思义是将当前环境变量的赋值操作做一个延迟。而需要做延迟扩展的变量需要用 “!!”两个英文感叹号包裹起来。(这里做了延迟的变量是上面代码中的 n:~1)。因为批处理中有一个“预处理”的概念,批处理读取命令时是按行读取的,在对指令进行处理之前要完成必要的预处理工作。而这其中就包括对该行命令中的变量赋值。这里如果不使用setlocal ENABLEDELAYEDEXPANSION指令,则n一直到程序执行完,它的值都将会是1000而没有变化。详细解释大家可以参考:setlocal enabledelayedexpansion的作用

        然后是for循环,官方给出的解释是:

相应的写法大家可以在cmd里面输入for /?去查看(中间有个空格喔)。

 

        需要说一下的是这里的 2^>nul 其实和一般的 2>nul 没区别。是因为放在了for循环中,所以需要对特殊符号 > 使用 ^ 进行转义。

 

set /a n+=1

表示给n赋值,每进行一次循环就把n加一。

ren "%%i\%%a" "%filename%"!n:~1!%%~xa

其中

"%filename%"!n:~1!%%~xa

是一个拼接的字符串。!n:~1!是使用了延迟的变量,表示取n向右位移一位的值。例如当 n=1001时,n:~1 的值为 001。

 ~xa中的a是上面的变量a,即文件的扩展名 .jpg。使用~x参数则表示将变量a的值直接拼接在前字符串的后面。

 

        至此,我们仅用输入文件名前缀,批处理脚本就能帮我们在前缀后面自动编号明明,行程一排整整齐齐的:xx001.jpg 酱婶儿的名字啦~

 

        最后考虑到脚本复用性,我们再对脚本做一丢丢修改,让它不止可以给 jpg 重命名,让他能给任意文件批量重命名。修改后的代码如下:

        

@echo off     
echo *******文件批量重命名*******   
echo.
echo.
 
 
set /p filename=请输入文件名前缀:
IF "%filename%"=="" set "filename=%%~ni"
 
set /p suffix=请输入文件类型:
IF "%suffix%"==""   echo.文件类型不能为空 &goto error
IF NOT EXIST *.%suffix% echo.不存在该格式文件 &goto error
 
setlocal ENABLEDELAYEDEXPANSION
for /r %%i in (.) do (
        set n=1000
        for /f "delims=" %%a in (' dir /b "%%i\*.%suffix%" 2^>nul ') do (
                set /a n+=1
                ren "%%i\%%a" "%filename%"!n:~1!%%~xa
        )
)
 
echo. &pause
exit
 
:error
echo. &pause

        毕竟也是花时间查了好久的,随手写篇日志记录一下~大笑

        OK,写完收工~

【 个人博文链接:http://wishes-blog.cn/archives/rename-bat

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值