Tem outra opção se no loop for em um arquivo em lotes


0

Eu tenho esse funcionamento para / F loop:

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]=!
)

O que ele faz é digitar linhas em um arquivo de texto, exceto se ele aparecer em uma linha com o texto [B]nele, ele adiciona BOLDao início da linha. Eu estou procurando uma maneira de ter algo semelhante para [S]onde ele pode adicionar SUPERao início. Eu tive isso:

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]=!"
    )

No entanto, não funciona por causa de como isso está sendo executado.

EDIT: Eu não posso terminar o loop com uma quebra ou goto porque existem várias linhas para processar.

Respostas:


3

Como você já está usando o DelayedExpansion, eu sempre coloco a linha atual na variável linee verifico via substituição de string se ela linecontém a marcação.

@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!
)

Intrigante. Eu não tinha considerado o uso de comandos variáveis. Parece que isso funcionaria muito bem. Obrigado.
Mark Deven

Como sempre, LotPings o especialista em lote para o resgate! : D
Mark Deven
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.