PowerShell批量重命名子文件夹文件:移除(ver.X.X)标识遇问题
批量移除文件名中的
(ver.X.X)部分的PowerShell脚本解决方案 你的问题出在正则表达式的写法上,原脚本里的正则没有正确匹配带空格的完整版本号括号部分,导致替换不彻底,留下了空括号。
原脚本的问题
原正则 (ver*.*)存在两个关键错误:
ver*是正则量词语法,意思是匹配ve加上任意数量的r(包括0个),不是你想要的匹配ver开头的内容- 没有转义括号
(),正则里的()是分组符号,不是字面括号,导致实际只替换了部分内容,留下空括号()
正确的脚本
下面是修正后的脚本,先加-WhatIf参数预览修改效果,确认没问题后再移除该参数执行实际重命名:
Get-ChildItem -Path "c:\test" -Recurse | Where-Object { $_.Name -match " \(ver\.[\d.]+\)\." } | Rename-Item -NewName { $_.Name -replace " \(ver\.[\d.]+\)", "" } -WhatIf
脚本说明
- 正则匹配规则:
\(ver\.[\d.]+\):匹配带前置空格的完整版本号括号部分::匹配文件名中版本号括号前的空格\(和\):转义括号,因为括号在正则中是特殊字符,需要匹配字面括号时必须转义ver\.:匹配ver.,其中\.转义点号(点号在正则中默认匹配任意字符)[\d.]+:匹配一个或多个数字或点号,覆盖ver.2.0、ver.1.3.5等多种版本号格式
- 过滤逻辑:用
Where-Object筛选出符合命名格式的文件,比直接用-Include更可靠(递归场景下-Include有时会因为路径规则出现遗漏) -WhatIf参数:执行时只会显示将要重命名的文件名,不会实际修改,方便你验证规则是否正确
示例效果
- 原文件名:
babebibobu (ver.2.0).xlsx - 重命名后:
babebibobu.xlsx
内容的提问来源于stack exchange,提问作者Kermit67
相关产品推荐
相关产品推荐

