【Python 小脚本·大用途 · 第 1 篇】
1. 痛点 100 字
手机导出的照片叫 IMG_20240601_143022.jpg
?下载的美剧是 S01E01 1080p x265.mkv
?手动改名太痛苦,尤其一次几十上百个文件。今天用 25 行 Python 脚本,让它们瞬间变成 2024-06-01_001.jpg
、S01E01-绝命毒师.mkv
,还支持正则自定义。
2. 脚本 25 行
#!/usr/bin/env python3
# rename_batch.py
import re, os, sys
from pathlib import Pathdef batch_rename(folder, pattern, repl, start_index=1):"""folder : 目标文件夹pattern : 正则表达式,用来捕获旧文件名中的片段repl : 新文件名模板,可用 \1 \2 引用捕获组start_index: 数字序号起始值"""folder = Path(folder)files = sorted(folder.iterdir(), key=lambda p: p.name) # 按文件名排序for idx, path in enumerate(files, start=start_index):if not path.is_file():continuenew_name = re.sub(pattern, repl.format(idx=idx), path.name)if new_name == path.name: # 避免同名覆盖continuenew_path = path.with_name(new_name)print(f"{path.name} --> {new_name}")path.rename(new_path)if __name__ == "__main__":if len(sys.argv) < 4:print("用法: python rename_batch.py 文件夹 正则 新模板 [起始序号]")print("示例: python rename_batch.py ./pics 'IMG_(\\d{8})_(\\d{6})' '\\1_\\2_{idx:03d}.jpg'")sys.exit(1)folder, pattern, repl = sys.argv[1:4]start = int(sys.argv[4]) if len(sys.argv) > 4 else 1batch_rename(folder, pattern, repl, start)
3. 一行运行命令
批量把 photos/
里的 IMG_20240601_143022.jpg
等重命名成 20240601_143022_001.jpg
:
python rename_batch.py ./photos 'IMG_(\d{8})_(\d{6})\.jpg' '\1_\2_{idx:03d}.jpg'
4. 效果示例
运行前
photos/
├── IMG_20240601_143022.jpg
├── IMG_20240601_143023.jpg
└── IMG_20240601_143024.jpg
运行后
photos/
├── 20240601_143022_001.jpg
├── 20240601_143023_002.jpg
└── 20240601_143024_003.jpg
5. 可选参数 & 常见坑
• 正则里捕获组用括号 ()
,{idx:03d}
表示 3 位数字补零。
• Windows 路径有空格请加引号:"./My Photos"
。
• 若出现同名文件,脚本会跳过并提示,不会覆盖。
• 想还原?把脚本第 21 行 path.rename(new_path)
改成 print(...)
先 dry-run 检查。
把脚本丢进系统 PATH,以后任何文件夹右键「在终端打开」即可一键改名,爽!