IF mit logisch verknüpften Bedingungen (OR und AND) in Batch
Hallo Community,
die Batchsyntax lässt logische Verknüpfungen mehrerer Bedingungen vermissen. Während man ein AND durch simple Aneinanderreihung von IF Anweisungen relativ einfach umsetzen kann, bedient man sich bei OR verschiedener Hilfskonstruktionen.
Hier mal eine Möglichkeit, wie man mit vordefinierten Variablen arbeiten kann, die entsprechenden Batchcode enthalten. Das Ganze beruht auf der Errorlevel-Logik. Man benötig einen Befehl, der den Errorlevel abhängig vom Ergebnis der Einzelvergleiche setzt. CALL ist hierfür geeignet.
Während die Kommandozeilen mit den Variablen nun relativ gut zu lesen sind, ist der Inhalt der Variablen if, or, and und then zugegebenermaßen aus dem Zusammenhang gerissen und kaum zu deuten. Also auch nur ein weiteres Workaround und keine endgültige Lösung ...
Quelle: IF THEN syntactic sugar
Grüße
rubberman
die Batchsyntax lässt logische Verknüpfungen mehrerer Bedingungen vermissen. Während man ein AND durch simple Aneinanderreihung von IF Anweisungen relativ einfach umsetzen kann, bedient man sich bei OR verschiedener Hilfskonstruktionen.
Hier mal eine Möglichkeit, wie man mit vordefinierten Variablen arbeiten kann, die entsprechenden Batchcode enthalten. Das Ganze beruht auf der Errorlevel-Logik. Man benötig einen Befehl, der den Errorlevel abhängig vom Ergebnis der Einzelvergleiche setzt. CALL ist hierfür geeignet.
@echo off &setlocal
:: Trick:
:: (call;) setzt errorlevel 0
:: (call) setzt errorlevel 1
:: Variablen if, or, and, then definieren.
for %%i in ("if=(call;)&(if ","or= (call))&&(if ","and= if ","then= (call))&if errorlevel 1 ") do set %%i
:: Beispiele
%if% a==a %or% a==b %or% a==c %then% (echo Wahr) else echo Falsch
%if% a==b %or% a==c %or% a==d %then% (echo Wahr) else echo Falsch
%if% a==a %and% a==b %and% a==c %then% (echo Wahr) else echo Falsch
%if% a==a %and% a neq b %and% a neq c %then% (echo Wahr) else echo Falsch
echo(
set "x=Wert"
set "y="
%if% defined x %or% defined y %then% (echo Wahr) else echo Falsch
%if% defined x %and% defined y %then% (echo Wahr) else echo Falsch
echo(
>"1.tmp~" type nul
2>nul del "2.tmp~"
%if% exist "1.tmp~" %or% exist "2.tmp~" %then% (echo Wahr) else echo Falsch
%if% exist "1.tmp~" %and% exist "2.tmp~" %then% (echo Wahr) else echo Falsch
del "1.tmp~"
echo(
pause
Quelle: IF THEN syntactic sugar
Grüße
rubberman
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 208847
Url: https://administrator.de/contentid/208847
Ausgedruckt am: 21.11.2024 um 20:11 Uhr