Habe eine andere if-Option in der for-Schleife in einer Batch-Datei

0

Ich habe diese funktionierende For / F-Schleife:

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

Was sie tut , ist Zeilen in einer Textdatei eingeben, mit Ausnahme , wenn es über eine Leitung mit dem Text coms [B]darin, fügt er BOLDan den Anfang der Zeile. Ich suche nach einer Möglichkeit, etwas Ähnliches zu haben, [S]wo es SUPERzum Anfang beitragen kann. Ich hatte das:

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

Es funktioniert jedoch nicht, weil das so läuft.

EDIT: Ich kann die Schleife nicht mit einem break oder goto beenden, da mehrere Zeilen zu verarbeiten sind.

Mark Deven
quelle

Antworten:

3

Da Sie DelayedExpansion bereits verwenden, füge ich die aktuelle Zeile immer in die Variable ein lineund überprüfe per Zeichenfolgensubstitution, ob linedas Markup enthalten ist.

@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!
)
LotPings
quelle
Faszinierend. Ich hatte nicht in Betracht gezogen, variable Befehle zu verwenden. Es scheint so, als würde das sehr gut funktionieren. Vielen Dank.
Mark Deven
LotPings ist wie immer der Batch-Experte zur Rettung! : D
Mark Deven