ren(或rename) 命令:适用于有简单、固定模式的重命名需求。for循环配合ren命令:适用于更复杂、需要基于文件内容(如日期、序号)进行重命名的情况。
使用 ren (rename) 命令(最常用)
ren 命令通过使用通配符( 和 )来实现批量重命名。

基本语法
ren "原文件名模式" "新文件名模式"
- (星号):代表任意长度的任意字符。
*.txt代表所有以.txt结尾的文件。 - (问号):代表单个任意字符。
file?.doc代表file1.doc,filea.doc等,但不代表file10.doc。
常见使用场景
场景 A:统一修改文件扩展名
假设你有一堆 .jpg 文件,想把它们全部改成 .png。
- 打开命令提示符(按
Win + R,输入cmd,回车)。 - 使用
cd命令进入你的文件所在目录,文件在D:\Pictures:cd /d D:\Pictures
- 执行重命名命令:
ren *.jpg *.png
- 解释:
*.jpg匹配所有以.jpg结尾的文件。*.png将匹配到的文件名中,扩展名部分替换为.png,而文件名主体保持不变。
- 解释:
场景 B:为所有文件名添加统一前缀
假设你有一堆 report1.xlsx, report2.xlsx 等文件,想给它们都加上 2025_ 前缀。

ren report* 2025_report*
- 解释:
report*匹配所有以report开头的文件。2025_report*将匹配到的文件名前面加上2025_。
场景 C:为所有文件名添加统一后缀
假设你有一堆 data.txt, image.jpg 等文件,想在文件名最后加上 _backup。
ren * * _backup
- 解释:第一个 匹配所有文件,第二个 会保留原始的完整文件名(不包括扩展名),然后在其后加上
_backup。data.txt会变成data_backup.txt。
场景 D:修改文件名中的某个部分
假设你有一堆 document_old.docx, report_old.docx 文件,想把 _old 去掉。

ren *_old.* *.*
- 解释:
*_old.*匹配所有文件名中包含_old的文件。 将文件名中_old及其之前的部分全部替换掉,只保留原始的扩展名。document_old.docx会变成docx。注意:这个方法会删除文件名主体,请谨慎使用。
使用 for 循环(更强大、更灵活)
当 ren 命令无法满足你的需求时,for 循环就是你的终极武器,它可以遍历文件,并对每个文件进行自定义操作。
基本语法
for %f in (文件集) do 新命令
%f:一个代表当前正在处理的文件的变量,在批处理文件(.bat)中,需要使用%%f。文件集:可以使用通配符,如*.txt。新命令:对每个文件执行的操作,这里通常是ren命令。
常见使用场景
场景 A:按顺序添加数字前缀
假设你有 a.txt, b.txt, c.txt,想重命名为 1_a.txt, 2_b.txt, 3_c.txt。
- 进入文件目录。
- 执行以下命令:
@echo off setlocal enabledelayedexpansion set count=0 for %%f in (*.txt) do ( set /a count+=1 set "filename=%%f" ren "!filename!" "!count!_!filename!" ) endlocal- 解释:
@echo off:不显示命令本身。setlocal enabledelayedexpansion:启用延迟变量扩展,使得在循环内可以正确使用!变量!。set count=0:初始化计数器。for %%f in (*.txt) do (...):遍历所有.txt文件。set /a count+=1:计数器加一。set "filename=%%f":将当前文件名存入变量。ren "!filename!" "!count!_!filename!":执行重命名,将计数器和原文件名组合成新文件名。
- 解释:
场景 B:从文件名中提取特定字符并重命名
假设你有文件 北京-天气-2025-10-27.txt,想提取最后部分 2025-10-27.txt 作为新文件名。
这个比较复杂,通常需要结合其他工具,但 for 循环的 tokens 和 delims 选项可以实现。
for %%f in (*.txt) do (
for /f "tokens=4 delims=-" %%a in ("%%f") do (
ren "%%f" "%%a"
)
)
- 解释:
- 外层
for循环遍历所有.txt文件。 - 内层
for /f循环处理每个文件名"%%f"。 delims=-:指定 作为分隔符。tokens=4:提取第四个部分,对于北京-天气-2025-10-27.txt,分割后是北京,天气,2025,10-27.txt,%%a的值就是10-27.txt。ren "%%f" "%%a":将原文件名重命名为提取出的部分。
- 外层
重要注意事项和最佳实践
-
先测试,再执行!
- 在执行批量重命名前,强烈建议先进行一次“模拟运行”。
- 模拟方法:将
ren命令换成echo命令,看看将要执行的操作是否符合你的预期。 - 示例:
# 想把所有 .doc 改成 .docx,先看看会改什么 echo ren *.doc *.docx
如果输出结果正确,再把
echo去掉,执行真正的ren命令。
-
备份重要文件!
批量重命名是不可逆的,如果操作失误,可能会导致文件名混乱甚至丢失,操作前最好将整个文件夹复制一份作为备份。
-
使用引号
- 如果文件名或路径中包含空格,一定要用英文双引号 括起来,否则命令会解析错误。
ren "my file.txt" "new file.txt"。
- 如果文件名或路径中包含空格,一定要用英文双引号 括起来,否则命令会解析错误。
-
路径问题
- 如果你的文件路径很深,或者路径中有空格,使用
cd命令可能会很麻烦,一个更简单的方法是直接在命令中指定完整路径:ren "D:\My Documents\Files\*.jpg" "D:\My Documents\Files\Old_*.jpg"
但这样写比较繁琐,更推荐的方式是:
pushd "D:\My Documents\Files" ren *.jpg Old_*.jpg popd
pushd会切换到指定目录并保存原路径,popd会返回原路径。
- 如果你的文件路径很深,或者路径中有空格,使用
更简单的替代方案:PowerShell
对于 Windows 10/11 用户,PowerShell 提供了更现代、更强大的重命名功能,语法也更直观。
示例:将所有 .jpg 文件重命名为 图片_序号.jpg
# Get-ChildItem 获取文件,ForEach-Object 遍历,Rename-Item 重命名
Get-ChildItem -Filter *.jpg | ForEach-Object -Begin { $i = 1 } -Process { Rename-Item -Path $_.Name -NewName "图片_$i.jpg"; $i++ }
虽然 PowerShell 命令看起来复杂,但它的功能更强大,也更不容易出错,是未来发展的方向。
| 需求 | 推荐命令 | 示例 |
|---|---|---|
| 简单批量改扩展名 | ren |
ren *.log *.txt |
| 统一添加前/后缀 | ren |
ren * my_* |
| 复杂、有逻辑的重命名 | for 循环 |
见上文示例 |
| 现代、功能强大 | PowerShell | 见上文示例 |
对于绝大多数日常需求,熟练掌握 ren 命令的通配符用法就足够了,遇到更复杂的情况,再使用 for 循环或 PowerShell。
