文件批量重命名:正则捕获组、序号补零和命名规范

· 约 3 分钟 🔠 文件批量重命名

批量重命名本质是字符串变换:把文件名当成结构化文本,用正则描述”原结构”,用捕获组引用”要保留的片段”,拼出新名字。搞清楚这个模型,任意命名规则都能表达。

核心操作:正则捕获组

假设你有一批相机照片,文件名是 IMG_20240315_0042.jpg,想改成 2024-03-15_0042.jpg

分析原结构

IMG_  20240315   _   0042   .jpg
固定  (年月日)   分隔  (序号)  后缀

匹配模式

IMG_(\d{4})(\d{2})(\d{2})_(\d+)
     ^^^    ^^^    ^^^    ^^^
     \1\2\3\4序号

替换模式

\1-\2-\3_\4

结果:IMG_20240315_0042.jpg2024-03-15_0042.jpg

捕获组规则:按左括号从左到右编号,从 1 开始。嵌套括号也按这个规则计数。

五个实用场景

场景 1:序号补零

问题:chapter1.mdchapter2.mdchapter10.md 按文件名排列时,chapter10 排在 chapter2 前面。

解法:

改前改后
chapter1.mdchapter01.md
chapter10.mdchapter10.md

匹配:chapter(\d+)\.md
替换:chapter + 补零处理 \1 到 2 位

场景 2:日期格式统一

问题:不同来源的文件日期格式混乱:202403152024-03-1515_03_2024

目标:统一成 2024-03-15 前缀。

对每种格式分开处理:

# 处理 YYYYMMDD 格式
匹配:^(\d{4})(\d{2})(\d{2})
替换:\1-\2-\3

# 处理 DD_MM_YYYY 格式
匹配:^(\d{2})_(\d{2})_(\d{4})
替换:\3-\2-\1

场景 3:去掉非法字符

Windows 不允许 : * ? < > | \ /,从其他系统复制来的文件名可能含这些字符。

匹配:[:\*\?<>|\\\/]
替换:-(或直接删掉,替换为空)

场景 4:字段顺序重排

会议录音文件名:产品周会_2024-03-15.mp3,想改成日期在前:2024-03-15_产品周会.mp3

匹配:(.+)_(\d{4}-\d{2}-\d{2})
替换:\2_\1

场景 5:添加统一前缀或后缀

给一批截图统一加项目前缀:

匹配:^(.+)$
替换:project-A_\1

或给所有 .jpg 文件加 _compressed 后缀:

匹配:^(.+)\.jpg$
替换:\1_compressed.jpg

文件命名规范速查

安全字符集

字母:A-Z a-z(跨平台大小写敏感差异注意)
数字:0-9
分隔:- _(推荐用 - 作词间分隔,_ 作字段分隔)
点:. 仅用于扩展名分隔

日期时间:永远用 ISO 8601

日期:2024-03-15
时间:14-30-00(冒号不安全,用连字符)
日期+时间:2024-03-15T14-30-00

原因:2024-03-15 按字母序排列 = 按时间序排列,一致性无需二次思考。

版本号

v1.0.0(语义化版本)
v20240315(日期版本)
v001 v002(序号版本,补零保证排序正确)

多语言文件

document.zh.pdf
document.en.pdf
README.zh-CN.md

ISO 639-1 语言代码(zh、en、ja)+ ISO 3166-1 地区代码(CN、US、JP),中间用连字符。

操作前的安全检查

  1. 先预览:在工具里确认”改前 → 改后”映射,不满意直接改规则
  2. 先备份:批量操作不可撤销,重要文件先复制一份
  3. 检查冲突:两个文件改成同一个名字 → 后者会覆盖前者,提前排查
  4. 小批测试:先对 5-10 个文件测试规则,确认正确再全量执行

常用正则速查

模式含义
\d数字(0-9)
\d{4}恰好 4 个数字
\d+1 个或多个数字
\w字母、数字、下划线
.任意字符(. 本身需要 \. 转义)
^字符串开头
$字符串结尾
[^-_.]不是 -_. 的字符
(.+?)非贪婪捕获(尽量少匹配)

配套工具

  • 正则测试 — 先在正则测试里验证匹配规则,再粘进重命名工具
  • 正则铁路图 — 可视化复杂正则的结构
  • 文本去重 — 先列出文件名清单,去重检查有没有意外重名
  • 字幕格式转换 — 字幕文件批量重命名的常见下游操作

❓ 常见问题

捕获组 \1 \2 是什么意思?

捕获组是正则里用小括号 () 包住的子模式,匹配到的内容可以用 \1\2 在替换字符串里引用。示例:把 IMG_20240315_123.jpg 改成 2024-03-15_IMG_123.jpg。匹配模式:IMG_(\d{4})(\d{2})(\d{2})_(\d+),替换为:\1-\2-\3_IMG_\4。括号标记了 4 个捕获组:(1) 年 → \1;(2) 月 → \2;(3) 日 → \3;(4) 序号 → \4。捕获组按左括号的顺序编号,从 1 开始。

怎么给序号统一补零?

补零目的是让文件名按字母顺序排列时等同于按数字顺序1.jpg2.jpg10.jpg 按字母序排列是 1、10、2(10 排在 2 前面),补零后 001.jpg002.jpg010.jpg 排列正确。工具的"序号"模式可以指定起始值和位数(如:起始 1,位数 3 → 001002…)。如果已有文件名里有混乱的数字,先用正则提取数字部分 (\d+),再在替换里用工具的补零函数格式化 \1 为固定位数。

Windows 文件名有哪些字符不能用?

Windows 保留字符\ / : * ? " < > | 共 9 个,不能出现在文件名里(路径分隔符 \/ 除外)。macOS 只有 :/ 不能用(/ 是路径分隔符,: 是 HFS+ 内部路径分隔历史遗留)。Linux 几乎无限制,但 /\0(null)不行。跨平台安全命名规则:只用 A-Z a-z 0-9 - _ .,中文在多数现代系统没问题但尽量避免用在开发工具路径里(node_modules 等工具偶有问题)。

批量重命名操作可以撤销吗?

批量重命名不进回收站,无法用系统撤销。安全做法:(1) 预览模式——先在工具里确认"改前 → 改后"的映射列表,不满意直接修改规则,不执行;(2) 先复制一份——在测试目录做一次全量复制,先改副本,满意了再改原目录;(3) 用脚本生成 undo 脚本——批量改名时同步输出一个反向映射脚本,出错时执行反向恢复。遇到重要的原始文件(照片、合同),务必先备份。

文件名里有日期,怎么统一成 YYYY-MM-DD 格式?

用正则捕获日期各部分,替换时重新排列。常见场景:(1) 202403152024-03-15:匹配 (\d{4})(\d{2})(\d{2}),替换 \1-\2-\3;(2) 15-03-2024(DD-MM-YYYY)→ 2024-03-15:匹配 (\d{2})-(\d{2})-(\d{4}),替换 \3-\2-\1;(3) Mar 15 2024 这种英文月份需要先用查找替换把月份名换成数字,再做格式化。统一成 ISO 8601(YYYY-MM-DD)之后,按文件名字母序排列 = 按日期时间序排列。

🔠 打开 文件批量重命名 序号/查找替换/正则/大小写/拼音/EXIF 拍摄时间·实时预览·原地改名或 ZIP 下载·本地处理