菜鸟科技网

dos命令如何批量重命名文件?

  1. ren (或 rename) 命令:适用于有简单、固定模式的重命名需求。
  2. for 循环配合 ren 命令:适用于更复杂、需要基于文件内容(如日期、序号)进行重命名的情况。

使用 ren (rename) 命令(最常用)

ren 命令通过使用通配符( 和 )来实现批量重命名。

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

基本语法

ren "原文件名模式" "新文件名模式"
  • (星号):代表任意长度的任意字符。*.txt 代表所有以 .txt 结尾的文件。
  • (问号):代表单个任意字符。file?.doc 代表 file1.doc, filea.doc 等,但不代表 file10.doc

常见使用场景

场景 A:统一修改文件扩展名

假设你有一堆 .jpg 文件,想把它们全部改成 .png

  1. 打开命令提示符(按 Win + R,输入 cmd,回车)。
  2. 使用 cd 命令进入你的文件所在目录,文件在 D:\Pictures
    cd /d D:\Pictures
  3. 执行重命名命令:
    ren *.jpg *.png
    • 解释*.jpg 匹配所有以 .jpg 结尾的文件。*.png 将匹配到的文件名中,扩展名部分替换为 .png,而文件名主体保持不变。

场景 B:为所有文件名添加统一前缀

假设你有一堆 report1.xlsx, report2.xlsx 等文件,想给它们都加上 2025_ 前缀。

dos命令如何批量重命名文件?-图2
(图片来源网络,侵删)
ren report* 2025_report*
  • 解释report* 匹配所有以 report 开头的文件。2025_report* 将匹配到的文件名前面加上 2025_

场景 C:为所有文件名添加统一后缀

假设你有一堆 data.txt, image.jpg 等文件,想在文件名最后加上 _backup

ren * * _backup
  • 解释:第一个 匹配所有文件,第二个 会保留原始的完整文件名(不包括扩展名),然后在其后加上 _backupdata.txt 会变成 data_backup.txt

场景 D:修改文件名中的某个部分

假设你有一堆 document_old.docx, report_old.docx 文件,想把 _old 去掉。

dos命令如何批量重命名文件?-图3
(图片来源网络,侵删)
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

  1. 进入文件目录。
  2. 执行以下命令:
    @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 循环的 tokensdelims 选项可以实现。

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":将原文件名重命名为提取出的部分。

重要注意事项和最佳实践

  1. 先测试,再执行!

    • 在执行批量重命名前,强烈建议先进行一次“模拟运行”。
    • 模拟方法:将 ren 命令换成 echo 命令,看看将要执行的操作是否符合你的预期。
    • 示例
      # 想把所有 .doc 改成 .docx,先看看会改什么
      echo ren *.doc *.docx

      如果输出结果正确,再把 echo 去掉,执行真正的 ren 命令。

  2. 备份重要文件!

    批量重命名是不可逆的,如果操作失误,可能会导致文件名混乱甚至丢失,操作前最好将整个文件夹复制一份作为备份。

  3. 使用引号

    • 如果文件名或路径中包含空格,一定要用英文双引号 括起来,否则命令会解析错误。ren "my file.txt" "new file.txt"
  4. 路径问题

    • 如果你的文件路径很深,或者路径中有空格,使用 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。

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