使用PowerShell正则批量重命名视频:移除括号及内容并合并空格
批量重命名视频文件的PowerShell解决方案
给你写了个能直接用的脚本,完美实现你要的效果:
$validExtensions = '.mkv', '.mp4' Get-ChildItem -Recurse -File | Where-Object Extension -In $validExtensions | Where-Object Length -GT 500mb | Rename-Item -NewName { # 移除所有圆括号及其内部内容 $cleanName = $_.BaseName -replace '\(.*?\)', '' # 移除所有方括号及其内部内容 $cleanName = $cleanName -replace '\[.*?\]', '' # 合并连续空格为单个空格,同时清理首尾多余空格 $cleanName = $cleanName -replace '\s+', ' ' | Trim() # 转大写后拼接原扩展名 $cleanName.ToUpper() + $_.Extension } -WhatIf
核心细节解释:
- 括号处理:用
\(.*?\)和\[.*?\]这两个正则,其中.*?是非贪婪匹配,能精准匹配每一对括号及其内部内容,不会出现跨括号匹配的问题(比如不会把(A) (B)当成一个整体删掉)。 - 空格合并:
\s+匹配1个及以上连续空格,替换成单个空格;Trim()用来去掉替换后可能留在文件名首尾的多余空格,避免出现类似MOVIENAME 2024 1080P.mkv这种开头带空格的文件名。 - 预览模式:脚本里加了
-WhatIf参数,执行后只会显示要重命名的结果,不会实际修改文件名。确认预览结果没问题后,删掉这个参数就能执行真实重命名了。
原脚本的问题:
你之前的脚本用了(.*)(\[.*\])(.*)这种贪婪匹配的正则,只能处理一组方括号,而且会把从文件名开头到最后一个方括号的所有内容都匹配进去,没法处理多组括号的情况;同时也没处理圆括号和合并空格的需求,所以达不到预期效果。
内容的提问来源于stack exchange,提问作者Vicky Dev
相关产品推荐
相关产品推荐

