菜鸟科技网

批处理命令如何批量重命名文件?

核心命令:RENRENAME

RENRENAME 是完全相同的命令,RENRENAME 的简写,更常用。

批处理命令如何批量重命名文件?-图1
(图片来源网络,侵删)

基本语法:

REN [驱动器号:][路径]旧文件名 新文件名
  • [驱动器号:][路径]:可选,指定要重命名的文件所在的驱动器和文件夹,如果不指定,则默认在当前目录下。
  • 旧文件名:必须,要被重命名的源文件名(可以包含通配符 和 )。
  • 新文件名:必须,新的文件名(可以包含通配符)。

重要提示:

  • 新文件名不能包含路径,你不能用 REN 命令将文件移动到另一个文件夹下并重命名,要移动文件,需要使用 MOVE 命令。
  • 通配符 代表任意数量的任意字符, 代表单个任意字符,这是批量重命名的关键。

单个文件重命名

这是最简单的用法,将一个具体的文件改为另一个具体的名字。

示例: 假设当前目录下有一个文件 report.txt,你想把它改名为 2025年度报告.txt

批处理命令如何批量重命名文件?-图2
(图片来源网络,侵删)
@echo off
echo 正在将 report.txt 重命名为 2025年度报告.txt...
ren report.txt "2025年度报告.txt"
echo 重命名完成。
pause

说明:

  • 如果新文件名中包含空格或特殊字符(如 &, , ),最好用英文双引号 括起来,以避免命令行解析错误。
  • @echo off 关闭命令回显,让脚本运行时更整洁。
  • pause 在脚本执行完后暂停,让你能看到输出结果,按任意键后关闭窗口。

使用通配符批量重命名

这是批处理最强大的功能之一,可以一次性处理多个文件。

示例 1:统一扩展名

将当前目录下所有 .txt 文件扩展名改为 .md

@echo off
echo 正在将所有 .txt 文件扩展名改为 .md...
ren *.txt *.md
echo 重命名完成。
pause

工作原理:

批处理命令如何批量重命名文件?-图3
(图片来源网络,侵删)
  • *.txt 匹配所有以 .txt 结尾的文件。
  • *.md 将匹配到的每个文件的扩展名替换为 .md,文件名本身保持不变。

示例 2:统一文件名前缀

假设你有大量照片 IMG_001.jpg, IMG_002.jpg, ... IMG_100.jpg,你想给它们都加上一个前缀 我的照片_

@echo off
echo 正在给所有 IMG_*.jpg 文件添加前缀...
ren IMG_*.jpg 我的照片_*.jpg
echo 重命名完成。
pause

工作原理:

  • IMG_*.jpg 匹配所有以 IMG_ 开头,.jpg 结尾的文件。
  • 我的照片_*.jpg 将匹配到的每个文件名中 IMG_ 的部分替换为 我的照片_*.jpg 部分保持不变(即数字部分)。

示例 3:修改文件名的一部分(替换文本)

假设你有一堆文件名中包含 旧版本 的文件,你想把它们都替换成 新版本

@echo off
echo 正在替换文件名中的 "旧版本" 为 "新版本"...
ren *旧版本* *新版本*
echo 重命名完成。
pause

工作原理:

  • *旧版本* 匹配文件名中任意位置包含 旧版本 的所有文件。
  • *新版本* 将匹配到的文件名中 旧版本 的部分替换为 新版本

更复杂的重命名(使用 FOR 循环)

REN 命令的规则无法满足需求时,你想在文件名中添加序号、提取日期等,就需要使用 FOR 循环来逐个处理文件。

示例 1:为文件名添加序号(前缀)

将当前目录下所有的 .jpg 文件重命名为 001_photo.jpg, 002_photo.jpg, ... 010_photo.jpg

@echo off
setlocal enabledelayedexpansion
set counter=1
echo 正在为所有 .jpg 文件添加序号前缀...
for %%f in (*.jpg) do (
    set filename=%%f
    if !counter! LSS 10 (
        set padded_num=0!counter!
    ) else (
        set padded_num=!counter!
    )
    ren "!filename!" "!padded_num!_!filename!"
    set /a counter+=1
)
echo 重命名完成。
pause
endlocal

代码解析:

  • setlocal enabledelayedexpansion:启用延迟变量扩展,这是在 FOR 循环内部正确使用变量的关键。
  • set counter=1:初始化一个计数器。
  • for %%f in (*.jpg) do (...):遍历当前目录下所有 .jpg 文件,将每个文件名赋值给变量 %%f
  • set filename=%%f:将当前文件名存入变量 filename
  • if !counter! LSS 10 (...):判断计数器是否小于10,如果是,在数字前补一个 0,实现 001, 002 的效果。!counter! 是延迟变量的写法。
  • ren "!filename!" "!padded_num!_!filename!":执行重命名,新文件名是 序号_原文件名
  • set /a counter+=1:计数器加1。

示例 2:修改文件名中的特定文本(更精确)

假设文件名格式为 项目A_数据报告.docx项目B_数据报告.docx,你想将它们改为 A项目_最终版.docx, B项目_最终版.docx

@echo off
echo 正在修改文件名格式...
for %%f in (*.docx) do (
    set "oldname=%%f"
    set "newname=!oldname:项目=!"
    set "newname=!newname:_数据报告=_最终版!"
    ren "!oldname!" "!newname!"
)
echo 重命名完成。
pause

代码解析:

  • set "oldname=%%f":获取当前文件名。
  • set "newname=!oldname:项目=!":这是字符串替换语法,它会将 !oldname! 变量中的所有 项目 替换为空(即删除)。
  • set "newname=!newname:_数据报告=_最终版!":在上一步结果的基础上,将 _数据报告 替换为 _最终版
  • ren "!oldname!" "!newname!":执行重命名。

移动并重命名

如前所述,REN 不能跨目录,要实现移动并重命名,需要使用 MOVE 命令。

示例:D:\Temp\old_name.txt 移动到 D:\Documents\new_name.txt

@echo off
echo 正在移动并重命名文件...
move "D:\Temp\old_name.txt" "D:\Documents\new_name.txt"
echo 操作完成。
pause

批量移动并重命名:D:\Source 文件夹下所有 .log 文件移动到 D:\Archive 文件夹,并将扩展名改为 .bak

@echo off
echo 正在移动并重命名所有 .log 文件...
move "D:\Source\*.log" "D:\Archive\*.bak"
echo 操作完成。
pause

总结与最佳实践

  1. 备份!备份!备份! 在执行批量重命名脚本前,务必备份你的文件,错误的脚本可能会造成数据丢失。

  2. 先测试,再执行 在复杂的脚本中,可以先使用 ECHO 命令来模拟将要执行的操作,而不是真的执行 RENMOVE。 将 ren "%%f" "new_%%f" 改为 echo ren "%%f" "new_%%f",这样你可以在屏幕上看到所有将要执行的命令,确认无误后再去掉 echo

  3. 使用 setlocalendlocal 在脚本中使用 setlocalendlocal 可以将变量修改限制在脚本内部,避免污染系统的环境变量。

  4. 善用引号 只要文件名或路径中可能包含空格,就养成用英文双引号 括起来的好习惯。

希望这份详细的指南能帮助你掌握批处理文件重命名!

分享:
扫描分享到社交APP
上一篇
下一篇