ren批量修改文件名bat
Windows 自带的量修批量重命名功能,说白了就是改文个半残废。选中一堆文件按 F2,量修改一个名字,改文系统给你后面自动加 (1)、量修(2)、改文(3)。量修这玩意儿应付旅游照片勉强够用,改文但凡遇到点正经需求——比如把 "IMG_20230415_143022.jpg" 里的量修日期提取出来重新排列,或者给一批文件加统一前缀还要求编号从 100 开始——它就彻底歇菜了。改文
我前阵子整理一个素材库,量修三百多个文件混在一起,改文命名规则乱七八糟。量修有带日期的改文,有带版本号的量修,还有一堆 "新建文件夹 (2)" 复制出来的玩意儿。手动改?改到第十个我就想砸键盘了。
这时候 bat 脚本就该上场了。
ren 命令到底怎么回事
ren 是 rename 的缩写,Windows 命令行里最基础的重命名指令。用法简单到令人发指:
ren 旧文件名 新文件名 比如 ren a.txt b.txt,a.txt 就变成 b.txt 了。就这么直接。
但它有个硬伤——不支持通配符批量替换。你写 ren *.txt *.md,系统会告诉你语法错误。ren 的通配符只能用在源文件上,目标名字必须写死。这就意味着想批量改扩展名,光靠 ren 一行命令搞不定。
那怎么办?用 for 循环包起来。
for 循环才是真正的杀招
看个实际例子。假设我有一堆 .jpeg 文件想全改成 .jpg:
for %%i in (*.jpeg) do ren "%%i" "%%~ni.jpg" 拆开看。%%i 是循环变量,%%~ni 表示提取文件名但不含扩展名。*.jpeg 是筛选条件。整句话的意思是:把所有 .jpeg 文件挨个拿出来,保留主文件名,扩展名换成 .jpg。
注意 bat 文件里循环变量要写双百分号 %%i,直接在 cmd 窗口里敲则是单百分号 %i。这个坑我踩过不止一次,每次都以为自己写错了命令。
加点编号和前缀
光改扩展名太小儿科了。真正有用的是加序号。比如把一批图片重命名成 photo_001.jpg、photo_002.jpg 这种格式:
@echo off setlocal enabledelayedexpansion set count=1 for %%i in (*.jpg) do ( ren "%%i" "photo_!count!.jpg" set /a count+=1 ) 这里必须用 enabledelayedexpansion 和感叹号变量,否则 count 在循环里不会实时更新——这是 bat 脚本最反直觉的设计之一。百分号变量在循环开始前就被展开固定了,只有感叹号才能拿到变化后的值。
编号从 1 开始没问题。想要 001 这种补零格式?bat 本身没有内置的字符串补零函数,得手动拼:
if !count! lss 10 (set num=00!count!) else if !count! lss 100 (set num=0!count!) else set num=!count! 丑是丑了点,但能用。
几个容易翻车的地方
文件名带空格。这是最常见的坑。上面所有 %%i 出现的地方都建议加引号,写成 "%%i"。不然遇到 "my photo.jpg" 这种名字,命令直接解析错误。
中文乱码。bat 文件默认用 ANSI 编码保存,如果你的文件名含中文,脚本文件也得存成 ANSI 或者 GBK。用 UTF-8 存 bat 再运行,中文文件名大概率变成乱码。我习惯用 Notepad++ 写脚本,右下角编码切到 ANSI 再保存。
重复执行。第一次跑完脚本,文件名已经改了,再跑一次就全乱套。稳妥做法是先复制一份测试目录,确认没问题再对正式文件动手。或者脚本开头加个确认提示,按 Y 才继续。
一个真实用过的脚本
上个月帮同事整理会议录音,文件长这样:
录音_20240310_090512.m4a 录音_20240310_103045.m4a 录音_20240311_140022.m4a ... 需求是把日期和时间提出来,改成 "0310_0905_会议.m4a" 这种格式。写了个脚本:
@echo off setlocal enabledelayedexpansion for %%i in (录音_*.m4a) do ( set "name=%%~ni" set "date=!name:~3,8!" set "time=!name:~12,4!" ren "%%i" "!date:~4,4!_!time!_会议.m4a" ) ~3,8 是从第 3 个字符开始取 8 个字符,拿到 "20240310"。~12,4 拿到 "0905"。然后拼起来。跑完三百多个文件,两秒钟搞定。手动改的话,一下午就没了。
bat 脚本处理文件名就是这么回事。不优雅,语法也老旧,但胜在 Windows 自带、不用装任何东西、双击就能跑。花二十分钟学几个基本套路,以后遇到批量重命名再也不用一个个手点了。









