核心命令:REN 或 RENAME
REN 和 RENAME 是完全相同的命令,REN 是 RENAME 的简写,更常用。

基本语法:
REN [驱动器号:][路径]旧文件名 新文件名
[驱动器号:][路径]:可选,指定要重命名的文件所在的驱动器和文件夹,如果不指定,则默认在当前目录下。旧文件名:必须,要被重命名的源文件名(可以包含通配符 和 )。新文件名:必须,新的文件名(可以包含通配符)。
重要提示:
- 新文件名不能包含路径,你不能用
REN命令将文件移动到另一个文件夹下并重命名,要移动文件,需要使用MOVE命令。 - 通配符 代表任意数量的任意字符, 代表单个任意字符,这是批量重命名的关键。
单个文件重命名
这是最简单的用法,将一个具体的文件改为另一个具体的名字。
示例:
假设当前目录下有一个文件 report.txt,你想把它改名为 2025年度报告.txt。

@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
工作原理:

*.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
总结与最佳实践
-
备份!备份!备份! 在执行批量重命名脚本前,务必备份你的文件,错误的脚本可能会造成数据丢失。
-
先测试,再执行 在复杂的脚本中,可以先使用
ECHO命令来模拟将要执行的操作,而不是真的执行REN或MOVE。 将ren "%%f" "new_%%f"改为echo ren "%%f" "new_%%f",这样你可以在屏幕上看到所有将要执行的命令,确认无误后再去掉echo。 -
使用
setlocal和endlocal在脚本中使用setlocal和endlocal可以将变量修改限制在脚本内部,避免污染系统的环境变量。 -
善用引号 只要文件名或路径中可能包含空格,就养成用英文双引号 括起来的好习惯。
希望这份详细的指南能帮助你掌握批处理文件重命名!
