任务描述
某一个文件夹下存放几百甚至上千张图片,格式均为jpg或者均为png,但是文件名杂乱无章。现在,笔者希望将这些文件统一命名为“img-X.jpg”的格式,其中X为十进制整数,例如“img-1.jpg”,“img-2.jpg”,……
批处理文件实现
@echo off & setlocal enabledelayedexpansion set num=1 for /f "delims=" %%i in ('dir /b *.jpg') do ( ren %%i img-!num!.%%~xi set /a num=!num!+1) echo 已重命名!num!张图片。 pause
详解
一行一行地解释。
第1行包含两个命令和和一个连接符。显然&符号的作用是连接两条命令。echo命令有两个用途
- 后面跟“on”或者是“off”打开或者是关闭后面所有命令的回显;
- 后面跟字符串,打印字符串
@符号的作用是关闭当前命令的回显。setlocal命令是批处理文件环境的本地配置,这里所跟的参数的含义允许变量延迟扩展。记住一条不准确但是好用的规则:当要在for中使用变量时,就在批处理文件中加上setlocal enabledelayedexpansion。可以在cmd中输入
setlocal /?
查看帮助信息。其实所有的命令之后都可以跟上“/?”查看帮助。
第2行的命令的作用是定义一个名字叫做num的变量,并且赋值为1。变量赋值(定义)的方式为
set 变量名=值
第三行的命令涉及到for语句的使用方式。for的用法比较多,这里使用的方式为
for /f "options" %%variable in ('command') do command
dir命令的作用是显示目录中的文件和文件夹列表。“/b”选项的作用是去除格式,可以通过命令
dir & dir /b
来观察区别。dir之后可以跟随参数,用于描述要匹配的文件名,可以是确切的文件名或者是一个命名规则。参数中可以使用通配符,“*”为匹配包括空字符内的任意长度的字符串,“?”能且只能匹配单个字符(个人用的不多)。所以,这行命令的作用就是遍历当前目录下所有扩展名为jpg的文件。每次遍历所执行的命令由do后面的命令定义。每次循环只会do之后的第一条命令,如果要执行多个命令,则需使用括号括起来或者是使用“&”符号连接多个命令。
第4行命令是重命名,该命令还有另外一个名字“rename”。其格式为
ren 旧名字 新名字
。这里需要对“!num!”和“%%~xi”做出一些简单的解释。在引用变量时,一般情况下使用“%variable%”的方式,但若要延迟展开变量,则用叹号包围变量名。而“%%~xi”表示将变量%%i展开为一个扩展名。
下一行是更新变量num的值。这里又遇到了set命令,并且还多了一个选项“/a”。“/a”的作用是说明“=”的右边是一个表达式。这样,在每次循环结束之前,num的值会都会递增1。
最后两行太简单,而且可有可无。
技巧
不要忘记使用COMMAND /?命令查询每个命令的使用方式!!!
不要忘记使用COMMAND /?命令查询每个命令的使用方式!!!
不要忘记使用COMMAND /?命令查询每个命令的使用方式!!!
未经允许不得转载:Charlie小站 » 批处理文件实战(一) 批量重命名文件
评论前必须登录!
登陆 注册