У меня есть этот цикл 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]=!"
    )

Однако это не работает из-за того, как это работает.

РЕДАКТИРОВАТЬ: Я не могу завершить цикл с помощью разрыва или перехода, потому что есть несколько строк для обработки.

1 ответ1

3

Поскольку вы уже используете 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!
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .