rubberman
Goto Top

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.

@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
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 ... face-wink

Quelle: IF THEN syntactic sugar

Grüße
rubberman

Content-ID: 208847

Url: https://administrator.de/knowledge/if-mit-logisch-verknuepften-bedingungen-or-und-and-in-batch-208847.html

Ausgedruckt am: 22.12.2024 um 13:12 Uhr