[...] ohne immer auf eine neue Sprungmarke zu verweißen?
Springst du sonst bei jeder if-Abfrage zu einer Sprungmarke?
Du kannst Code nämlich auch direkt hinter die if-Abfrage schreiben und diesen sogar als Block über mehrere Zeilen fortführen:
if not exist beispiel.txt echo Datei nicht gefunden.
Hier ein (sinnloser) Beispiel-Block:
if "%variable%"=="Beispiel" (
set variable=0
pause
cls
)
Mit den Klammern lässt sich auch ein else-Block verwenden, der ausgeführt wird, wenn die Bedingung nicht zutrifft. Zudem lassen sich weitere if-Abfrage verwenden:
@echo off
if "%date:~0,6%"=="24.12." (
echo Heute ist Weihnachten
) else (
if %date:~3,2% GEQ 10 (
echo Nicht mehr lange bis Weihnachten
)
)
pause
Um zu deiner Frage zurück zu kommen:
Ein und gibt es in Batch nicht, ist aber so auch nicht viel umständlicher:
if <Bedingung1> if <Bedingung2> [(] <Befehl[e]> [)]
also zum Beispiel:
@echo off
choice /m "Beliebige Ziffer eingeben: " /c 0123456789 /n
set /a ziffer = %errorlevel% - 1
:: überprüfe ob ziffer im Bereich [3;6]
if %ziffer% GEQ 3 if %ziffer% LEQ 6 (
echo ziffer im Bereich [3;6]
) else (
echo ziffer groesser als 6
)
pause
Das Problem ist hier, das sich das else nicht auf beide Bedingungen bezieht, sondern nur auf die letzte, möchte man ein else im Sinne von
if not <Bedingung1> if not <Bedingung2>
muss man das entweder extra so hinschreiben, oder man verwendet Variablen/Sprungmarken (wie bei oder).
Problematischer wird es, wenn du ein oder verwenden willst. Also zum Beispiel "Zahl kleiner als 2 oder größer als 7"
Da könntest du natürlich auch wieder mit Sprungmarken arbeiten:
(Notiz: die Abfrage in dem Beispiel könnte natürlich stark vereinfacht werden, indem man nach GEQ 2 und LEQ 7 abfragt, aber soll ja nur ein Beispiel sein)
:: Anfangscode wie oben ::
if %ziffer% LSS 2 goto true
if %ziffer% GTR 7 goto true
echo Die ziffer ist groesser als 1 und kleiner als 8
goto continue
:true
echo Die Ziffer ist 0,1,8 oder 9
:continue
pause
exit
schöner denke ich wäre in dem Fall aber eine Variable:
:: Anfangscode wie oben ::
set "bool=false"
if %ziffer% LSS 2 set "bool=true"
if %ziffer% GTR 7 set "bool=true"
:: und dann reicht eine if-Abfrage
if %bool% equ true (
echo Die Ziffer ist 0,1,8 oder 9
) else (
echo Die ziffer ist groesser als 1 und kleiner als 8
)
pause
exit
FAZIT: Das beste ist wohl, zumindest für kompliziertere Fälle, mithilfe von mehreren if-Abfragen eine Variable zu setzten, mit der du dann eine finale if-Abfrage (inklusive else) durchführen kannst.
~Tim