首页/系统/Windows 运维速查/批量重命名文件
CMD 常用命令74 条

批量重命名文件

用 for 循环配合 ren 给一批文件统一加前缀或按序号编号:命令行写单百分号,批处理文件里必须写双百分号。

Windows 运维速查系统更新于 2026-10-13

命令是干什么的

用 for 循环配合 ren 给一批文件统一加工:加前缀、换后缀、按序号编号。核心是 for %变量 in (文件集) do 的写法,它在命令行交互与批处理文件里语法不同——交互式用单百分号 %f,批处理 .bat 里必须写双百分号 %%f。

延迟展开为什么必须

循环体内若要一边修改变量、一边使用它的新值(例如自增计数器 i 并立即用于命名),普通 %i% 在解析期就被替换成旧值。必须 setlocal enabledelayedexpansion 并改用 !i!,这是批量编号脚本最容易出错的地方。

基本信息

适用平台Windows 全版本 CMD(Windows 7/10/11 与各版 Server)
语法for %变量 in (文件集) do ren 旧名 新名,批处理文件里写 %%变量
关键差异命令行交互用 %f;批处理文件用 %%f
延迟展开setlocal enabledelayedexpansion 之后用 !变量! 取实时值

典型使用场景

  • 给某目录下所有照片统一加前缀,例如 vacation_
  • 批量修改扩展名,例如把 .txt 改成 .md
  • 给文件按顺序编号,生成 img_1.jpg、img_2.jpg 这样的名字
  • 打包或归档前统一加上日期前缀
  • 清理导出文件名里重复出现的固定前缀

命令行与批处理写法

命令行与批处理写法
:: 命令行交互式:给所有 jpg 加前缀
for %f in (*.jpg) do ren "%f" "vacation_%f"
:: 批处理文件中:必须用双百分号
for %%f in (*.jpg) do ren "%%f" "vacation_%%f"
:: 按序号编号(需延迟变量展开,否则序号不递增)
setlocal enabledelayedexpansion
set /a i=0
for %%f in (*.jpg) do (set /a i+=1 & ren "%%f" "img_!i!.jpg")

写法读法

写法生效位置说明
%f命令行交互窗口在窗口中直接执行时使用
%%f批处理文件写成 %f 会静默失效
(*.jpg)文件集可用通配符,也可写多个模式
!i!延迟展开取值必须先 enabledelayedexpansion
%i%解析期替换循环内取不到刚更新的值
ren 目标名改名动作目标名已存在会报错中断
命令行里写 %f 可用,批处理里必须写 %%f;反之在命令行写 %%f 不报错但匹配不到文件,这类静默失败最耗排查时间。
只是统一改扩展名可以直接用 ren *.txt *.md;命名规则更复杂时,用 PowerShell 的 Rename-Item 配计算出的新名更直观。执行前先复制一份目录演练,能避免不可逆的批量改名事故。

易错点

  • 批处理里写成 %f 会失效(应为 %%f),这是最高频的批处理错误之一
  • 循环中 ren 到已存在的目标名会中途报错中断,编号方案可规避
  • 未启用延迟展开时序号不会递增,文件会被改到同一个名字并在中途报错
  • 在错误的目录执行批量改名会波及无关文件,先 dir 预览再执行

数据来源与参考

  • Microsoft Learn:for 命令
  • Microsoft Learn:ren 命令

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌