如何移除文件名中方括号内的随机字符串(Bat/PowerShell脚本)
问题解决:批量移除文件名中方括号包裹的随机字符串
问题场景
编辑.bat脚本用于种子下载后重命名文件,所有文件名包含方括号包裹的随机字符串(例如:Episode 13 [EA2614CB].mkv)。尝试移除该字符串时,添加文件扩展名报错,不添加则文件无后缀无法播放。
错误原因
原REM Test段的PowerShell命令存在两个核心问题:
- 语法错误:
$_.Extension被放在了Rename-Item的脚本块外部,导致无法正确拼接扩展名 - 正则冗余:无需先将方括号替换为圆括号,直接匹配方括号及内部内容即可完成移除
修复后的核心代码
替换原REM Test段的命令为以下内容(同时支持.mkv和.mp4,减少重复执行):
powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName -replace '\[.+?\]','' + $_.Extension }"
代码说明
\[.+?\]:正则表达式精准匹配方括号及其中的任意内容(\[匹配左方括号,.+?匹配任意字符且尽可能少匹配,避免误删其他内容,\]匹配右方括号)- 脚本块内直接完成替换后拼接
$_.Extension,语法正确,确保文件保留原有扩展名
进一步优化建议
原脚本中针对.mkv和.mp4的重复命令可以合并,减少冗余:
- 合并
Download Tags段:
powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName.Replace('(1080p)','').Replace('[SubsPlease]','') + $_.Extension }"
- 合并
Season Tags段(用正则替代大量重复的Replace):
powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName -replace '\.S(\d{2})E',' S$1 E' + $_.Extension }"
- 合并
Clean Up段(用正则一次性清理多余空格):
powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName -replace '\s+',' ' + $_.Extension }"
完整优化后的脚本
@echo off REM 切换到下载所在盘符 B: REM 进入下载目录 cd "\Anime\.Purgatory" REM 移除常见下载标签(合并mkv和mp4处理) powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName.Replace('(1080p)','').Replace('[SubsPlease]','') + $_.Extension }" REM 移除方括号包裹的随机字符串 powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName -replace '\[.+?\]','' + $_.Extension }" REM 格式化季集编号(用正则替代重复Replace) powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName -replace '\.S(\d{2})E',' S$1 E' + $_.Extension }" REM 清理多余空格 powershell -command "Get-ChildItem -Recurse -Filter *.mkv,*.mp4 | Rename-Item -NewName { $_.BaseName -replace '\s+',' ' + $_.Extension }" REM 移动文件到最终目录(剪切粘贴) Robocopy "B:\Anime\.Purgatory" B:\Anime\.Heaven /s /mov pause
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

