如何在CMD/BAT脚本中移除文本里括号内的所有内容?
批处理移除文本中括号及内部内容的解决方案
批处理原生字符串替换不支持正则或通配符匹配(你尝试的!string:(*)=!写法无效),要覆盖所有测试场景,需通过循环迭代逐步移除括号及内部内容,直到字符串中无括号为止。以下是可行的实现代码:
@echo off setlocal enabledelayedexpansion :: 逐行读取目标文件 for /f "delims=" %%a in (test.txt) do ( set "line=%%a" :process_loop :: 检查当前行是否包含左括号 echo !line! | findstr /C:"(" >nul if not errorlevel 1 ( :: 拆分左括号前的内容 set "left_part=!line:(=" & set "right_part=!" :: 拆分右括号后的内容 set "right_part=!right_part:*=)!" :: 拼接得到移除括号段后的新行 set "line=!left_part!!right_part!" goto process_loop ) :: 仅输出非空行(过滤整行都是括号的场景) if not "!line!"=="" echo !line! ) endlocal
代码说明
- 启用
enabledelayedexpansion确保循环内变量能动态更新 - 用
findstr判断行内是否还有括号,驱动循环处理 - 通过字符串拆分技巧,精准截取括号前后的有效内容并拼接,彻底移除括号及内部文本
- 最后过滤空行,对应整行均为括号的测试场景
覆盖测试场景验证
- 输入
可用子串 (括号内需忽略的文本)→ 输出可用子串 - 输入
(括号内需忽略的文本) 可用子串→ 输出可用子串 - 输入
(括号内需忽略的文本) 可用子串 (另一部分需忽略的文本)→ 输出可用子串 - 输入
(整行需完全忽略的文本)→ 无输出(空行被过滤)
可选优化(移除首尾冗余空格)
如果需要清理处理后行的首尾空格,可在输出前添加以下代码:
for /f "tokens=*" %%b in ("!line!") do set "line=%%b"
内容的提问来源于stack exchange,提问作者jeffp
相关产品推荐
相关产品推荐

