Tem outra opção if no loop for em um arquivo em lote

0

Eu tenho esse funcionamento para o loop / 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]=!
)

O que ele faz é digitar linhas em um arquivo de texto, exceto se ele aparecer em uma linha com o texto [B] , adicionando BOLD ao início da linha. Eu estou procurando uma maneira de ter algo semelhante para [S] onde ele pode adicionar SUPER ao 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, isso não funciona devido a como isso está sendo executado.

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

    
por Mark Deven 28.06.2018 / 17:34

1 resposta

3

Como você já está usando o DelayedExpansion, eu sempre coloco a linha atual na variável line e verifico via substituição de string se line conté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!
)
    
por 28.06.2018 / 17:47