多子目录下批量重命名*-ABC-DE(7位数字).ext格式文件是否可行?
当然能实现!这种批量调整文件名的需求,用命令行工具就能轻松搞定,我给你分不同操作系统整理了具体方案:
方案一:Linux/macOS 环境(用
find + rename) 这个组合可以递归遍历所有子目录,精准匹配并批量重命名文件:
find /你的目标目录路径 -type f -name "*-ABC-DE???????.ext" -exec rename 's/(.*)-ABC-(DE\d{7})\.ext/$1-$2-ABC\.ext/' {} +
拆解一下各部分的作用:
/你的目标目录路径:替换成你要处理的根目录绝对路径-type f:只处理文件,避免误改目录名-name "*-ABC-DE???????.ext":匹配你指定的文件名格式,???????对应7位数字- 正则表达式
s/(.*)-ABC-(DE\d{7})\.ext/$1-$2-ABC\.ext/:- 捕获
-ABC-之前的所有内容到第一个分组($1) - 捕获
DE加7位数字的部分到第二个分组($2) - 把文件名重组为
$1-$2-ABC.ext,实现把ABC移到DE(7位数字)后面
- 捕获
提示:可以先加
-n参数到rename命令里(比如rename -n 's/.../'),预览重命名结果,确认没问题后再去掉-n执行实际修改。
方案二:Windows 环境(用 PowerShell)
PowerShell 自带的递归搜索和正则替换功能也能搞定这个需求:
Get-ChildItem -Path "C:\你的目标目录路径" -Recurse -File -Filter "*-ABC-DE???????.ext" | Rename-Item -NewName { $_.Name -replace '(.*)-ABC-(DE\d{7})\.ext', '$1-$2-ABC.ext' } -WhatIf
说明:
-Recurse:递归遍历所有子目录-WhatIf:这是预览参数,执行后只会显示要修改的文件名,不会实际改动;确认结果正确后删掉这个参数,再执行一次就会完成重命名- 正则替换逻辑和 Linux/macOS 方案完全一致,确保文件名格式符合你的要求
额外注意事项
- 备份优先:如果这些文件比较重要,建议先复制一份备份再执行重命名操作
- 灵活调整正则:如果你的扩展名不是固定的
.ext,可以把正则里的\.ext改成\.[^\.]+,这样就能匹配任意扩展名的文件
内容的提问来源于stack exchange,提问作者Fabio Brassini
相关产品推荐
相关产品推荐

