bat脚本批量改变文件名

时间:2022-12-20 16:23:20

处理测试图片时,一般需要把手机拍的照片名称修改为数字序列名称。
把下列代码保存为bat文件,放在待处理图片的文件夹中,可修改文件名称为”sp01.jpg”, “sp02.jpg”, …

@echo off
setlocal enabledelayedexpansion
set num=1
for /F %%i IN ('dir /b *.jpg') do (
if !num! LSS 10 (ren "%%i" "sp0!num!.jpg") else ren "%%i" "sp!num!.jpg"
set /a num=num+1
echo !num!
)
pause

@echo off
运行时dos小黑框不必输出每一句执行的命令

setlocal enabledelayedexpansion
延迟环境变量扩展,否则num无法递增

set命令
给num赋值

for /F (options) %%i IN (SET) do ()
for循环
options可写可不写,用于提取循环对象的不同部分比如”tokens=1 delims=.”表示将对象以小数点进行分段,使用分段后的第1份,还有其他一些选项我没用到(而且这俩其实也没用到),用的时候再搜吧..
%%i IN ()对括号里的每一个元素进行操作,比如括号里是’dir /b *.jpg’表示当前目录下的所有jpg格式的文件名,/b是用于列出文件名的参数,%%i代表一个文件名。

if !num! LSS 10 (ren “%%i” “sp0!num!.jpg”) else ren “%%i” “sp!num!.jpg”
如果num小于10,就把这个文件名修改为sp0num.jpg否则spnum.jpg
两个感叹号包住变量能够提取出这个变量的值,ren是rename重命名

set /a num=num+1
/a说明后面是个表达式,否则这里就不会执行加法,而是直接让num的变量值变成“num+1”这个字符串了。

echo pause
这两句都可以不要,主要是为了在程序如果出问题的时候在小黑框看看发生了什么。