Иметь другую опцию if в цикле for в командном файле

377
Mark Deven

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

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

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

0

1 ответ на вопрос

3
LotPings

Поскольку вы уже используете 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! ) 
Интригующий. Я не думал об использовании переменных команд. Кажется, что это будет работать очень хорошо. Благодарю. Mark Deven 6 лет назад 0
Как всегда, LotPings спешит на помощь! : D Mark Deven 6 лет назад 0