
这个工具解决什么问题
从相机、截图工具、下载目录里攒下来的文件,名字往往乱得没法看:IMG_20260101_093012.jpg 这种一长串编号,「会议记录 - 副本」「报告草稿(1)」这种带副本和括号的重复名,还有「项目排期表 final final」这种改到自己也分不清的版本。要整理成规范名字,手工一个个改,几十个文件就是半小时;更怕的是改着改着撞名——两个文件改成同一个名字,后改的直接把先改的覆盖掉,文件内容就没了。用命令行脚本又怕写错正则,一跑全乱。
- 原来的做法:在资源管理器里选中一批文件按 F2 批量改名,只能加统一前缀或后缀,想要序号、想去掉「副本」二字就得手工一个个改;或者现写一段 Python 脚本,改之前还得反复确认正则写对了没有。
- 用这个工具:选文件夹,在左边填规则(前缀/后缀、查找替换、序号、统一扩展名、大小写),右边立刻出现「原名 → 新名」对照表,冲突的文件标红并自动跳过,确认无误再点执行。
- 省下来的:原来整理一个文件夹要半小时且提心吊胆怕覆盖,现在填规则、看预览、点一下,几十秒完成;因为执行前就能看到每个文件改成什么,不会出现改完才发现改错的情况。
技术实现
Python 3 + tkinter 写成单窗口程序,用 PyInstaller 打包成单个 exe,双击即用,目标机器不需要装 Python。选 Python 而不是 C#,是因为文件批量处理这类需求经常要临时加规则、改逻辑,Python 的改动成本最低;而 tkinter 是标准库自带,不引第三方 UI 框架,打包出来的体积小、依赖少。
- 重命名逻辑写成纯函数,完全不碰文件系统:make_new_name(原名, 序号, 规则) 只做字符串运算,输入一个名字、输出一个新名字,不读不写任何文件;build_plan() 把一批名字映射成一张「改名计划表」。这样做有两个好处:可以在一个文件都不创建的情况下把规则跑一遍验证(本工具的自测就是这么做的),以及界面上的实时预览可以放心地反复调用,不会有任何副作用。
- 先预览后执行,冲突在动手前就暴露:界面上永远先呈现「原名 → 新名 → 状态」三列表格。状态分四种:待改名、无变化、重名冲突、名称非法。重名冲突用橙色标出并且不会被执行——两个不同文件被规则改成了同一个名字时,工具直接跳过它们,而不是先改一个再报错。
- 临时名两步改名,环形改名不会互相覆盖:如果只是按顺序改,遇到 a.txt → b.txt 和 b.txt → a.txt 这种环形改名,第一个改完就把第二个的源文件覆盖了。这里先把所有待改文件改成随机临时名(__rn_ + 随机串),全部改完后再统一改成最终名,两步走彻底避开覆盖。自测里专门验证过 a↔b 交换后两个文件的内容确实互换了。
- 目标已存在时直接拒绝,绝不覆盖:执行前逐个检查目标名:如果目标文件已存在,而且它不在本次要改名的文件之列,就说明会覆盖一个不相干的文件,工具直接抛错终止,不执行任何一条改名。宁可不动,也不能弄丢用户的文件。
- 规则执行顺序固定,并写在界面上:五步顺序是:查找替换 → 大小写 → 前后缀 → 序号 → 扩展名。这个顺序不是随意定的:必须先替换再统一大小写,否则替换出来的内容会被大小写规则二次改写;序号放在最后,是为了让「前缀 + 原名 + 后缀 + 序号」的顺序稳定可控。界面上直接把这行顺序说明写出来,用户不用猜。
- 失败尽力回滚,只处理文件不动子目录:执行过程中任何一步出错,工具会把还停在临时名上的文件改回原名,尽量回到动手前的状态,并在界面上提示检查文件夹。另外扫描时只用 os.path.isfile 过滤,子目录一律跳过——重命名工具不应该递归进目录树,那超出了它该管的事。
技术栈:Python 3、tkinter 窗体、PyInstaller 打包为单 exe
已知局限:只处理所选文件夹第一层的文件,不递归子目录;不重命名文件夹本身;序号按列表排序后的顺序分配(可在预览里看到具体对应关系);跨盘符移动不支持(这是重命名不是移动);规则不支持保存为方案文件,每次打开重新填。
操作教程
- 打开程序
双击 exe,窗口打开:上方是文件夹选择,左边是重命名规则,右边是改名预览表格,下方是「预览改名结果 / 执行重命名」按钮和状态栏。
预期结果:窗口正常显示,状态栏提示「先选择一个文件夹」。 - 选择文件夹
点「选择文件夹」挑一个目录,或直接把文件夹路径粘进上方的输入框再点「重新扫描」。工具会列出该文件夹第一层的所有文件(子目录会自动跳过)。
预期结果:右侧表格列出所有文件名,状态栏显示「已扫描到 N 个文件」。 - 填写重命名规则
按需要填前缀、后缀、查找/替换(可勾「按正则表达式查找」)、统一扩展名、文件名大小写;要加序号就勾上「添加序号」,并设置起始值、步长、补零位数、位置与分隔符。
预期结果:每次改动规则,右侧预览立即刷新,不需要点按钮。 - 核对预览与冲突
逐行核对「原文件名 → 新文件名」。绿色的「待改名」会被执行;灰色「无变化」跳过;橙色的「重名冲突」或「名称非法」会被自动跳过,不会执行。
预期结果:状态栏汇总「共 N 个文件:X 个将改名,Y 个无变化,Z 个有冲突」。 - 执行重命名
确认无误后点「执行重命名」,会弹出确认框告知将要改动多少个文件;确认后工具先改成临时名再改成最终名,完成后自动重新扫描并刷新列表。
预期结果:弹窗提示「已重命名 N 个文件」,列表中的文件名全部更新为新名字。 - 重新开始或调整
想换一套规则就点「清空全部规则」;想只改一部分文件,就先用系统搜索把目标文件集中到一个文件夹再处理。
预期结果:清空后预览恢复为「原名 = 新名」的无变化状态。
全部处理在本地完成,不联网、不上传任何文件名或文件内容。建议首次使用时先在一个测试文件夹上试一遍。
常见问题
技术实现与后续维护
本工具由我们自行开发并持续维护,每次迭代都经过本地自测。代码刻意分成两半:上半部分是纯逻辑(split_ext / make_new_name / build_plan / plan_summary / execute_plan),不依赖 tkinter,可以单独导入做测试;下半部分是界面(App 类),只负责把界面上的输入收集成规则字典,再调用纯逻辑。想改改名规则只动 make_new_name(),想改界面只动 App 里的控件。
技术构成:
src/renamer.py—— 唯一源码文件:纯逻辑(改名规则/计划/执行)+ tkinter 界面DOCS/开发文档.md—— 工程结构、规则顺序推导、安全性设计说明与扩展点
运行环境:
用 PyInstaller 打包为单文件 exe(在已装 pyinstaller 的 Python 环境中执行):
pyinstaller --onefile --noconsole --name "批量文件重命名工具" src\renamer.py
打包产物在 dist\ 目录下。开发时也可以直接运行 python src\renamer.py 查看界面效果。
可扩展方向:
- 把 read_rules() 返回的字典存成 JSON,即可实现「改名方案」的保存与载入
- 在 build_plan() 前增加一层过滤,只对匹配的文件应用规则
- 增加执行日志与反向操作,实现撤销
- 接入 EXIF / 文件创建时间,支持按日期批量命名
本工具免费提供使用,但不对外分发源码。如果你需要在本工具基础上做功能调整、对接内部系统或长期维护,可以联系我们做二次开发,源码与工程文档可在定制合作中一并交付。
需要其它功能?可以定制
这个工具只做一件事:一堆文件要统一改名,手工改又慢又容易撞名、覆盖文件。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。
常见的定制需求:
- 增加「改名方案保存/载入」,把常用规则存成模板一键复用
- 增加「按 EXIF 拍摄时间重命名」,把相机照片整理成日期命名
- 增加「改名历史与一键撤销」,用日志文件记录每次操作并支持回滚
- 增加「文件内容哈希去重」,找出真正重复的文件再统一改名
- 联系方式:邮箱/微信见站内「联系我们」页面,或在本文下方留言
- 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
- 交付形式:定制项目可交付可执行程序,按需一并交付源码与工程文档,支持长期维护
使用说明与免责声明
- 本工具在本地运行,不联网、不上传任何数据到服务器。
- 涉及文件改写的功能,请在使用前备份原始文件。
- 软件完全免费,可自由使用与转发,请勿用于倒卖。
- 因误操作造成的数据问题请自行承担。

