批量重命名听起来是个小问题,直到你有三百个文件、四种命名约定,并且不能出错。
重命名不是正则的炫技
正则表达式很强大,但它不适合作为唯一的交互入口。用户通常知道自己想做什么——“去掉前缀”“按顺序编号”“把扩展名改成小写”——却不一定知道如何把这几个动作写成一个不会误伤的正则。
Renamer 把操作拆成六类规则:插入、删除、替换、大小写、关联、编号。每条规则只负责一件事,可以添加到队列里按顺序执行。规则之间是组合关系,不是互相覆盖。
可预览是底线
任何批量操作都必须先给出完整的“原名称 → 新名称”对照表。预览不是锦上添花,而是这项工具的信任基础。用户需要在执行前看到边界情况:空文件名、重复名称、超长路径、非法字符。
预览还承担了调试作用。规则顺序不对时,用户可以直接看到中间结果,而不必执行后再回滚。队列的每一行都显示当前规则的参数摘要,减少“我到底加了什么”的记忆负担。
撤销与历史
再好的预览也无法覆盖所有文件系统差异。因此每次执行都会写入一条历史记录,保留原路径与新路径的映射。撤销不是“反向再跑一次规则”,而是依据记录精确还原,避免规则本身不幂等带来的二次破坏。
// 撤销依据真实路径映射,而不是重跑规则
type RenameRecord struct {
ID string
OldPath string
NewPath string
Rule string
Time time.Time
}
结语
工具的价值不在于展示多少能力,而在于把一件事做得可预期。规则队列、实时预览、可撤销历史——这三件事加起来,才让“批量”两个字变得可以放心按下。
