用 Python Tkinter 写了个高颜值批量文件重命名工具,核心是这套安全重命名算法

发布时间:2026/8/28 18:57:58
用 Python Tkinter 写了个高颜值批量文件重命名工具,核心是这套安全重命名算法 用 Python Tkinter 写了个 高颜值 批量文件重命名工具核心是这套安全重命名算法前言平时整理下载文件夹、相机照片、项目文档最烦的就是文件名乱糟糟photo (1).jpg、新建文档 2.docx、IMG_20240801_235959.jpg……市面上批量重命名工具不少但要么界面老得像是上个时代的产品要么一堆付费弹窗。于是我用 Python 标准库Tkinter手搓了一个零第三方依赖、现代 UI、规则灵活最关键的是——重命名永远不会把文件搞丢。已开源文末有仓库地址。界面长这样左右分栏左边实时预览原文件名 → 新文件名右边管理重命名规则底部一键执行。配色走紫罗兰 青色的现代路线参考了 WorkBuddy 一类的质感。功能一览功能说明文件类型过滤图片 / 文档 / 视频 / 音频 / 压缩包一键筛选8 种重命名规则查找替换、加前缀、加后缀、序号编号、删除区间、改扩展名、正则替换、大小写转换规则组合多条规则按顺序依次执行可增删改、上下移规则导入导出规则集存成 JSON下次直接复用预览 冲突检测执行前先看效果自动标出目标名冲突一键撤销重命名错了点一下全部恢复技术亮点安全重命名这一步最容易翻车批量重命名的最大风险不是规则写错而是重命名过程本身。最经典的坑互换改名想把a.txt改成b.txt、b.txt改成a.txt。如果按顺序一个接一个改第二次就撞名了连环改名a → b、b → c顺序不对就失败改名改到一半程序崩溃文件名停在中间状态。我的方案是临时名两步法代码在br4.py的execute_rename/_safe_rename第一步所有文件 → 临时名UUID 前缀形如 .br_tmp_xxxx_原文件名 第二步所有临时名 → 目标名这样做的好处任何时刻文件名互不冲突——临时名用的是 UUID几乎不可能撞名原目标名也被腾空了执行前把「原文件名 → 目标名」的映射存在内存里某一步失败就逆序回滚_rollback_temps文件不会停留在半改名状态撤销undo_rename就是反向执行一遍映射表简单可靠。此外还有两道校验Windows 非法字符 : / \ | ? *和 1-31 控制字符改名后直接进不去系统必须提前拦Windows 保留名CON、PRN、AUX、NUL、COM1~9、LPT1~9——这些名字在 Windows 里是设备名你永远创建不出一个叫CON.txt的文件代码里提前给出警告。规则引擎怎么设计每条规则就是一个(规则类型, 参数字典)元组按列表顺序执行_apply_single_rule里用 if-elif 分发forrule_type,paramsinself.rules:ifrule_typeregex:namere.sub(params[pattern],params[new],name)elifrule_typeprefix:nameparams[text]name# ...规则可以导出成 JSONexport_rules/import_rules比如照片加水印式编号这套规则存下来下次换个文件夹直接用。扩展新规则也很容易在RuleDialog里加一个类型 参数表单在_apply_single_rule里加一个分支就完事。怎么用源码直接跑只用 Python 标准库无任何第三方依赖python br4.py打包成单文件 exePyInstallerpipinstallpyinstaller pyinstaller br4.spec产物就是dist/br4.exe双击即用。开源地址仓库https://gitcode.com/2402_84199450/Batch_Rename协议MIT代码里还保留了br1.py~br3.py的完整演进历史从 4 月最初版到现在的重构版想看一个工具怎么一步步长成这样的可以翻翻。如果觉得有用欢迎 Star 支持也欢迎提 Issue 交流新规则的想法

相关新闻