相册里的乱文件名怎么批量改?30 行 Python 一键整理

2026-10-02 · 喵窝资源铺

从相机、微信、截图里攒下来的文件,名字基本没法看:IMG_20260918_102233.jpg、Screenshot 2026-09-12 at 14.23.11.png、WeChat_2026-09-22_112233.mp4……想按日期归档,右键重命名几百次会把手点废。Windows 右键"批量重命名"只会得到"照片(1).jpg",日期信息全丢。

这篇给一个 30 行、可直接运行 的批量改名脚本,把乱名统一改成 日期_类型_序号。本文代码实跑验证,输出如下文所示。

改名规则:日期 + 类型 + 序号

完整脚本

保存为 rename.py,在照片文件夹里运行 python rename.py 即可。只改名、不动内容,目标名已存在会跳过:

"""批量改文件名:把相机/微信/截图的乱文件名改成「日期_类型_序号」。
用法:python rename.py [目录]
默认当前目录,只改名不动内容,目标名已存在自动跳过。
"""
import sys, re
from pathlib import Path

# (匹配正则, 日期处理函数, 新名前缀)
RULES = [
    (r"^IMG_(\d{4})(\d{2})(\d{2})_\d+", lambda m: f"{m.group(1)}-{m.group(2)}-{m.group(3)}", "img"),
    (r"^Screenshot (\d{4})-(\d{2})-(\d{2})", lambda m: f"{m.group(1)}-{m.group(2)}-{m.group(3)}", "screenshot"),
    (r"^WeChat_\d{4}-(\d{2})-(\d{2})_\d+", lambda m: "2026-" + "-".join(m.groups()), "wechat"),
]

def main(folder=".", prefix_default="file"):
    root = Path(folder)
    counters = {}
    for p in sorted(root.iterdir()):
        if not p.is_file():
            continue
        ext = p.suffix.lower()
        for pat, to_date, prefix in RULES:
            m = re.match(pat, p.name)
            if m:
                date = to_date(m)
                counters[date] = counters.get(date, 0) + 1
                target = root / f"{date}_{prefix}_{counters[date]:02d}{ext}"
                if target.exists():
                    print(f"跳过(已存在): {p.name}")
                    break
                p.rename(target)
                print(f"{p.name}  →  {target.name}")
                break
        else:
            print(f"未匹配(不动): {p.name}")

if __name__ == "__main__":
    main(*sys.argv[1:])

实测效果

13 个乱名文件(4 类来源混合),跑一次:

IMG_20260918_102233.jpg  →  2026-09-18_img_01.jpg
IMG_20260918_102234.jpg  →  2026-09-18_img_02.jpg
IMG_20260923_160000.jpg  →  2026-09-23_img_01.jpg
IMG_20260923_160001.jpg  →  2026-09-23_img_02.jpg
IMG_20260923_160002.jpg  →  2026-09-23_img_03.jpg
Screenshot 2026-09-12 at 14.23.11.png  →  2026-09-12_screenshot_01.png
Screenshot 2026-09-12 at 14.40.03.png  →  2026-09-12_screenshot_02.png
WeChat_2026-09-22_112233.mp4  →  2026-09-22_wechat_01.mp4
WeChat_2026-09-22_145501.mp4  →  2026-09-22_wechat_02.mp4
...(共 13 个全部改名成功,0 个遗漏)

紧接着重跑了一次验证幂等性,输出全是:

未匹配(不动): 2026-09-12_screenshot_01.png
未匹配(不动): 2026-09-22_wechat_01.mp4
...(13 个全部跳过,无一被二次改名)

三个容易踩的坑

想改成自己的规则?

脚本就 30 行,RULES 列表加一条正则就能支持新来源(比如 IMG_20260918_102233 之外的相机格式、IMG-20260918-WA0001 的 WhatsApp 格式)。如果你要的是"按拍摄日期建子文件夹 + 改名"、"按 EXIF 拍摄时间而不是文件名"、或者几百个文件夹批量跑——那是另一个量级的活,可以找我们代写(见下)。

不想自己跑?我们代做。描述你的文件名乱法(贴几个例子即可),9.9 元起,AI 编写 + 人工核验交付,24 小时内给出定制脚本 + 使用说明。
⚠️ 虚拟物品一经交付概不退款;未达到承诺效果免费重做。
👉 喵窝资源铺 · 服务清单

相关阅读:800 个乱文件自动整理 · 多个 Excel 表怎么合并?4 种方法 · 30 行 Python 自动对账