Haben Sie eine andere if-Option in der for-Schleife in einer Batchdatei

468
Mark Deven

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 es tut, ist, Zeilen in eine Textdatei einzugeben, es sei denn, es überschneidet eine Zeile mit dem darin enthaltenen Text [B]und fügt sie BOLDzum Zeilenanfang hinzu. Ich bin auf der Suche nach einer Möglichkeit, etwas Ähnliches zu haben, [S]wo sie hinzufügen können, SUPERan den Anfang. Ich hatte folgendes:

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, wie das läuft.

EDIT: Ich kann die Schleife nicht mit einem break oder goto beenden, da mehrere Zeilen verarbeitet werden müssen.

0

1 Antwort auf die Frage

3
LotPings

Da Sie bereits DelayedExpansion verwenden, stecke ich die aktuelle Zeile immer in die Variable lineund überprüfe per String-Ersetzung, ob sie linedas Markup enthält.

@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! ) 
Faszinierend Ich hatte nicht daran gedacht, variable Befehle zu verwenden. Es scheint, als würde das sehr gut funktionieren. Vielen Dank. Mark Deven vor 6 Jahren 0
Wie immer ist LotPings der Batch-Experte zur Rettung! : D Mark Deven vor 6 Jahren 0