批量重命名本质是字符串变换:把文件名当成结构化文本,用正则描述”原结构”,用捕获组引用”要保留的片段”,拼出新名字。搞清楚这个模型,任意命名规则都能表达。
核心操作:正则捕获组
假设你有一批相机照片,文件名是 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.jpg → 2024-03-15_0042.jpg
捕获组规则:按左括号从左到右编号,从 1 开始。嵌套括号也按这个规则计数。
五个实用场景
场景 1:序号补零
问题:chapter1.md、chapter2.md…chapter10.md 按文件名排列时,chapter10 排在 chapter2 前面。
解法:
| 改前 | 改后 |
|---|---|
chapter1.md | chapter01.md |
chapter10.md | chapter10.md |
匹配:chapter(\d+)\.md
替换:chapter + 补零处理 \1 到 2 位
场景 2:日期格式统一
问题:不同来源的文件日期格式混乱:20240315、2024-03-15、15_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),中间用连字符。
操作前的安全检查
- 先预览:在工具里确认”改前 → 改后”映射,不满意直接改规则
- 先备份:批量操作不可撤销,重要文件先复制一份
- 检查冲突:两个文件改成同一个名字 → 后者会覆盖前者,提前排查
- 小批测试:先对 5-10 个文件测试规则,确认正确再全量执行
常用正则速查
| 模式 | 含义 |
|---|---|
\d | 数字(0-9) |
\d{4} | 恰好 4 个数字 |
\d+ | 1 个或多个数字 |
\w | 字母、数字、下划线 |
. | 任意字符(. 本身需要 \. 转义) |
^ | 字符串开头 |
$ | 字符串结尾 |
[^-_.] | 不是 -、_、. 的字符 |
(.+?) | 非贪婪捕获(尽量少匹配) |