批量替换文件名中[]为()的批处理脚本无效,求调整方法
批量替换文件名方括号为圆括号的批处理问题
需要批量重命名格式为series[sxxexx]title.mp4的文件,将文件名中的方括号[]替换为圆括号()(因Plex无法识别含[]的文件),尝试了以下两段批处理脚本但均无效果:
尝试的脚本1:
@echo on Setlocal enabledelayedexpansion Set "Pattern=*[*]*" Set "Replace=*(*)*" For %%a in (*.mp4) Do ( Set "File=%%a" Ren "%%a" "!File:%Pattern%=%Replace%!" ) pause&Exit
尝试的脚本2:
@echo on Setlocal enabledelayedexpansion Set "PL=[" Set "PR=]" Set "RL=((" Set "RR=)" For %%a in (*.mp4) Do ( Set "File=%%a" Ren "%%a" "!File:%PL%PR%=%RL%RR%!" ) pause&Exit
问题原因与修正方案
原脚本错误点:
- 脚本1的错误:批处理的变量字符串替换不支持通配符(
*)作为匹配模式,!File:%Pattern%=%Replace%!无法识别这种格式的替换规则。 - 脚本2的错误:
!File:%PL%PR%=%RL%RR%!属于语法错误,无法直接拼接两个变量作为替换匹配项,且无法同时完成左右括号的替换。
正确的批处理脚本:
@echo on Setlocal enabledelayedexpansion :: 遍历当前目录下所有MP4文件 For %%a in (*.mp4) Do ( Set "File=%%a" :: 替换左方括号为左圆括号 Set "File=!File:[=(!" :: 替换右方括号为右圆括号 Set "File=!File:]=)!" :: 仅当文件名有变化时执行重命名,避免无意义报错 If Not "%%a"=="!File!" Ren "%%a" "!File!" ) pause&Exit
使用说明:
- 将脚本保存为
.bat文件,放在需要重命名的MP4文件所在目录执行 - 脚本会逐个替换文件名中的所有左、右方括号,支持文件名含多个方括号的场景
- 新增的判断语句可避免对原本就无方括号的文件执行重命名操作,减少不必要的报错
内容的提问来源于stack exchange,提问作者Drew Pierce
相关产品推荐
相关产品推荐

