批量文件重命名
按查找替换、前后缀、日期、序号这些规则一次改掉一批文件名,改之前先看两列预览,冲突和非法字符当场标红。
也可以把文件直接拖到这个面板里。选文件夹有两种:用「读取文件夹并原地改名」可以改完直接写回磁盘, 但只有 Chromium 内核的浏览器支持;用「选择整个文件夹」只是把文件名读进来,改完只能打包下载。
改名范围
只对点号前面的部分做改名,扩展名原样保留。
查找替换
前后缀与大小写
日期与序号
改名预览
还没有加入文件。选好之后这里会列出「原名 → 新名」两列对比,有改动的行会高亮,冲突或带非法字符的行会标红。
执行顺序
规则之间不满足交换律,所以顺序是固定写死的,页面上也不提供拖动排序。实际顺序是:
- 按「保留扩展名 / 只改扩展名」切出要改的那一段
- 查找替换(纯文本或正则,可选区分大小写)
- 大小写转换
- 插入日期时间(可选放开头或结尾)
- 加前缀、加后缀
- 加序号(可选放开头或结尾)
- 重名去重
- 非法字符与 Windows 保留名校验
序号特意放在最外层(前缀和后缀拼完之后才加),这样带序号的文件在文件管理器里按名字排就是连续的一串:要是序号夹在前缀里面,前缀一变排序就乱了。去重永远在最后一步,因为前面任何一步都可能让两个名字撞到一起,早点去重等于白算一遍。
使用说明
批量改名最容易出的两类事故,一是把名字改成了系统不接受的字符串,二是把两个文件改成了同一个名字。前者集中体现在 Windows 上:反斜杠、斜杠、冒号、星号、问号、引号、尖括号和竖线不能出现在文件名里;以点号或空格结尾的名字会被系统悄悄截掉;CON、PRN、AUX、NUL、COM1 到 COM9、LPT1 到 LPT9 是设备保留名,加什么扩展名都不能用。这些限制在 macOS 上大多不存在,但文件一旦拷到 Windows、或者被 Windows 用户解开你的 ZIP,问题就冒出来了,所以这一页直接按最严的口径拦,标红的行不会参与改名也不会进包。
重名的判定特意做成不区分大小写。Windows 的 NTFS 和 macOS 默认的 APFS 都是大小写不敏感的文件系统,Picture.jpg 和 picture.jpg 在同一目录下本来就是同一个名字,只在 Linux 上才算是两个。所以「本批文件里任意两个新名字,忽略大小写后相同」就算撞车,默认给后出现的那个加 -2、-3 直到不重复。判重是拿改名后的完整名字(含扩展名)比的,不是只比主名。
序号用补零来保证排序正确,这不是审美问题:不补零时文件名按字符串比较,会得到 1、10、11、2、3 这种顺序,补到三位才是 001、002 …… 010。起始值和步长也可以拿来留空号,比如另一批文件占了 1 到 100,就把这一批设成从 200 开始。日期取的是执行时刻的本地时间,不同批次跑出来的值会不一样,想要固定日期就先用别的工具把日期算好,再当纯文本前缀填进来。
能不能写回原目录,取决于浏览器给不给文件系统接口。Chromium 内核的浏览器支持选一个文件夹、拿到文件句柄,再用句柄上的 move 原地改名——它只改目录项、不重写内容,大文件也是瞬间完成,创建时间也会保留。Safari 和 Firefox 没有这个接口,所以只能打包下载:内容装进一个新的 ZIP,磁盘上的原文件一个字节都不动,解压之后才是新名字的那一份。两种方式在页面上用不同的按钮区分,按钮下面也会写明当前这批文件走的是哪条路。
改名的过程本身只碰文件名,不读也不写文件内容,所以速度取决于文件数量而不是体积。真正吃内存的是打包下载这一步:所有文件的内容都要先读进内存再压成一个 ZIP,几百兆的一批就会让标签页卡住甚至崩掉,页面上超过 150MB 会提前提醒。需要长期保留或有合规要求的一批文件,改名前建议先用文件哈希留一份校验值,再动手;想知道某个没有扩展名的文件到底是什么格式,用文件魔数识别看一眼;需要把结果压起来发给别人,压缩级别和中文文件名的那些讲究可以看ZIP 压缩与解压。
常见问题
点「写回原文件夹」和「打包下载 ZIP」有什么区别?
写回是用浏览器的文件系统接口直接给磁盘上的文件改名(只是改目录项,不重写内容),原文件就变成了新名字。打包下载则是把改名后的文件装进一个新的 ZIP 交给你,磁盘上的原文件一个字节都不会动,解压出来才是新名字的一份副本。前者更省事也更省空间,但它要求浏览器支持目录选择器,Safari 和 Firefox 目前都不支持,只能在 Chrome、Edge 这类 Chromium 内核的浏览器里用。
为什么我的替换规则把序号也改了?
因为执行顺序是固定的,而序号排在替换之后,所以替换碰不到序号。如果反过来发现序号被替换掉了,多半是替换写成了正则而且用了很宽的模式,例如用点号匹配任意字符,或者用了空匹配。把查找改成纯文本模式,或者把正则收紧一些就行。
序号补零有什么讲究?
补零的作用是让文件管理器按名字排序时顺序正确。不补零的话 10 会排在 2 前面,因为字符串比较是逐位比字符的。位数填 3 就会得到 001、002 …… 010 这样。起始值和步长也都能改,比如从 100 开始、步长 10,就得到 100、110、120,适合给已经排好序的另一批文件留出空号。
为什么有些名字会被拦下来?
因为目标平台不接受。反斜杠、斜杠、冒号、星号、问号、引号、尖括号和竖线在 Windows 上不能当文件名;以点号或空格结尾的名字 Windows 也会把结尾丢掉;CON、PRN、AUX、NUL、COM1 到 COM9、LPT1 到 LPT9 是设备保留名,加任何扩展名都不能用。这些在 macOS 上多半能写出来,但文件一拷到 Windows 或者别人解压你的 ZIP 时就会出问题,所以在这里就标红拦下。
两个文件被改成了同一个名字怎么办?
默认会按顺序给后出现的那个自动加 -2、-3 直到不撞车,预览里那一行会标出来。判重不区分大小写,因为 Windows 和 macOS 的默认文件系统都不区分,Picture.jpg 和 picture.jpg 放一起本身就是冲突。关掉去重开关的话就不再自动加后缀,重复的行会直接报错,让你自己回去改规则。
「保留扩展名」和「只改扩展名」怎么选?
只改主名是最常用的:扩展名不动,避免把 jpg 变成 JPG 之后有些程序认不出来。只改扩展名则反过来,主名一个字符都不动,适合批量把 .jpeg 统一成 .jpg、把 .txt 统一成 .md,或者把一列没有扩展名的文件补上正确的扩展名。两种模式共用同一套规则,规则只作用在选中的那一段上。
正则替换里能用捕获组吗?
能。替换内容里可以写 $1、$2 引用查找里的捕获组,例如查找 (\d+) 替换成 [$1] 会给每个数字加方括号。注意 $ 在替换串里有特殊含义,真要输出美元符号得写两个。写错正则时页面会直接提示,不会悄悄按纯文本处理。