返回随笔工程笔记 · Renamer

批量重命名工具里的规则队列设计

批量重命名听起来是个小问题,直到你有三百个文件、四种命名约定,并且不能出错。

重命名不是正则的炫技

正则表达式很强大,但它不适合作为唯一的交互入口。用户通常知道自己想做什么——“去掉前缀”“按顺序编号”“把扩展名改成小写”——却不一定知道如何把这几个动作写成一个不会误伤的正则。

Renamer 把操作拆成六类规则:插入、删除、替换、大小写、关联、编号。每条规则只负责一件事,可以添加到队列里按顺序执行。规则之间是组合关系,不是互相覆盖。

可预览是底线

任何批量操作都必须先给出完整的“原名称 → 新名称”对照表。预览不是锦上添花,而是这项工具的信任基础。用户需要在执行前看到边界情况:空文件名、重复名称、超长路径、非法字符。

预览还承担了调试作用。规则顺序不对时,用户可以直接看到中间结果,而不必执行后再回滚。队列的每一行都显示当前规则的参数摘要,减少“我到底加了什么”的记忆负担。

撤销与历史

再好的预览也无法覆盖所有文件系统差异。因此每次执行都会写入一条历史记录,保留原路径与新路径的映射。撤销不是“反向再跑一次规则”,而是依据记录精确还原,避免规则本身不幂等带来的二次破坏。

// 撤销依据真实路径映射,而不是重跑规则
type RenameRecord struct {
  ID      string
  OldPath string
  NewPath string
  Rule    string
  Time    time.Time
}

结语

工具的价值不在于展示多少能力,而在于把一件事做得可预期。规则队列、实时预览、可撤销历史——这三件事加起来,才让“批量”两个字变得可以放心按下。

回到顶部

威威牛 独立手艺人

独立数字手艺人。打磨 tMarkdown、tPicCraft、Renamer 等小工具,记录创造与探索的全过程。相信优雅的代码与真诚的文字能够经受时间淘洗。