在批处理文件的 for 循环中添加另一个 if 选项

在批处理文件的 for 循环中添加另一个 if 选项

我有这个功能 For /F 循环:

Setlocal EnableDelayedExpansion
for /F "tokens=*" %%A in (New.txt) do (
    echo "%%A" | findstr /C:"[B]" 1>nul
    if !errorlevel!==1 echo "%%A"
    set line=%%A
    if !errorlevel!==0 echo BOLD !line:[B]=!
)

它的作用是在文本文件中输入行,但如果遇到包含文本的行[B],它会添加BOLD到行首。我正在寻找一种类似的方法,让它[S]可以添加SUPER到行首。我有这个:

Setlocal EnableDelayedExpansion
for /F "tokens=*" %%A in (New.txt) do (
        echo "%%A" | findstr /C:"[B]" 1>nul
        if !errorlevel!==1 echo "%%A" | findstr /C:"[S]" 1>nul & if %errorlevel%==1 echo "%%A" & if %errorlevel%==0 echo SUPER !line:[S]=!
        set line=%%A
        if !errorlevel!==0 echo "!line:[B]=!"
    )

但由于运行方式的原因,它无法工作。

编辑:我无法用 break 或 goto 结束循环,因为有多行需要处理。

答案1

由于您已经在使用 DelayedExpansion,所以我会始终将当前行填充到变量中line,并通过字符串替换检查是否line包含标记。

@Echo off & Setlocal EnableDelayedExpansion
for /F "tokens=*" %%A in (New.txt) do (
    set "line=%%A"
    if "!line!" neq "!line:[B]=!" set "line=BOLD !line:[B]=!"
    if "!line!" neq "!line:[S]=!" set "line=SUPER !line:[S]=!"
    echo=!line!
)

相关内容