批处理文件实战(一) 批量重命名文件

bat-ren

任务描述

某一个文件夹下存放几百甚至上千张图片,格式均为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命令有两个用途

  1. 后面跟“on”或者是“off”打开或者是关闭后面所有命令的回显;
  2. 后面跟字符串,打印字符串

@符号的作用是关闭当前命令的回显。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小站 » 批处理文件实战(一) 批量重命名文件

赞 (4)
分享到:更多 ()