如何批量重命名Windows文件以移除特定字符串?(PowerShell/Linux方案)
批量简化文件名的PowerShell与Linux方案
PowerShell 实现方法
针对这类文件名格式(原文件名后跟随_[ID-开头的后缀),可以通过正则匹配批量截断后缀:
# 仅处理当前目录下的文件 Get-ChildItem -Filter "*_[ID-*" | Rename-Item -NewName { $_.Name -replace "_\[ID-.*", "" } # 如果需要递归处理子目录中的文件,添加 -Recurse 参数 Get-ChildItem -Filter "*_[ID-*" -Recurse | Rename-Item -NewName { $_.Name -replace "_\[ID-.*", "" }
命令说明
Get-ChildItem -Filter "*_[ID-*":筛选出文件名包含_[ID-的目标文件-replace "_\[ID-.*", "":用正则匹配从_[ID-开始的所有内容,将其替换为空,保留原始文件名部分
Linux 实现方法
Linux下可根据系统预装的rename版本选择不同命令:
方法1:Perl版rename(多数发行版默认)
直接用正则替换批量修改:
# 处理当前目录文件 rename 's/_\[ID-.*//' *_\[ID-* # 递归处理所有子目录文件 find . -type f -name "*_[ID-*" -exec rename 's/_\[ID-.*//' {} +
方法2:util-linux版rename(部分轻量发行版)
若系统是util-linux版本的rename,可结合参数扩展实现:
find . -type f -name "*_[ID-*" -exec sh -c 'mv "$0" "${0%_[ID-*}"' {} \;
命令说明
- 正则表达式
s/_\[ID-.*//:匹配并删除_[ID-及之后的所有字符 ${0%_[ID-*}:利用Shell参数扩展,截取文件名中_[ID-之前的部分作为新文件名
内容的提问来源于stack exchange,提问作者B Brown
相关产品推荐
相关产品推荐

