If … Else… Else If… in Batch – mit Verschachtelung

Aus irgendeinem Grund habe ich lange Zeit nicht gewusst, dass es If Else in Batch gibt…
Ich hatte bereits ein Tutorial zum Kombinieren mehrerer Befehle in einer Zeile geschrieben. Damit kann ich so etwas wie If Else vortäuschen:

if not 0==1 echo dies & echo das & del jenes.txt & goto korrekt
echo foo & echo bar & del bullshit.txt & goto falsch

Dabei gibt es echtes If… Else… in Batch!
Parameter abfangen könnte also so aussehen:

if /i %action%==triggered-restart (
if exist %restartdir% call :kill-server & rd %restartdir% /s /q
goto end
) 

if /i %action%==start-server (
tasklist |find /i "IQB_Server.exe"
if not %errorlevel%==0 start IQB_Server.exe
goto end
)

if /i %action%==check-status (
tasklist |find /i "IQB_Server.exe"
if %errorlevel%==1 (
echo Serverprozess nicht gefunden.
) else (
echo Serverprozess gefunden
)
pause
goto end
)

if /i %action%==force-restart (
call :kill-server
goto end
)

if /i %action%==daily-restart (
call :kill-server
goto end
)

if /i %action%==? (
call :help
) else ( 
if /i %action%==help (
call :help
) else ( 
if /i %action%==hilfe (
call :help
) else ( 
if /i %action%==usage (
call :help
))))

Man achte auf die Möglichkeit der tiefen Verschachtelung von If Else. Es wird zwar schnell unübersichtlich mit den Klammern aber es funktioniert, wenn man sie richtig setzt.

Wichtig: Nach dem Statement des If und nach dem Else unbedingt ein Leerzeichen lassen, sonst gibts Fehler. Fehlerhaft wäre also:

REM Fehlerhaftes Beispiel
if %test%==1(
echo foo
) else(
echo bar
)

Ein funktionierender Einzeiler:

if %test%==1 (echo foo)else (echo bar)

Es ist übrigens genauso auch ein If Not [Statement] ( ) möglich.

3 Kommentare

  1. Habe heute auch ein wenig experimentiert. Mein Progrämmchen merkt sich bis zu drei beim Programmstart mitgegebene Parameter (C:\Dokumente und Einstellungen\Chef>param.bat blah blahblah blahblahblah) und gibt diesbezüglich eine Zusammenfassung aus:

    @echo off

    echo Parameter1: „%1“
    echo Parameter2: „%2“
    echo Parameter3: „%3“

    if „%1″==““ (
    echo Parameter 1 ist leer
    ) else (
    echo dem Programm wurde „%1“ als Parameter 1 mitgegeben.
    )

    if „%2″==““ (
    echo Parameter 2 ist leer
    ) else (
    echo dem Programm wurde „%2“ als Parameter 2 mitgegeben.
    )

    if „%3″==““ (
    echo Parameter 3 ist leer
    ) else (
    echo dem Programm wurde „%3“ als Parameter 3 mitgegeben.
    )

    if „%2%3″==““ echo Parameter 2 oder 3 sind leer.
    if not „%2%3″==““ echo Parameter 2 oder 3 sind nicht leer.

    pause

  2. Wichtig ist auch, dass nach der abschließenden Klammer des if und vor dem else kein Zeilenumbruch stehen darf!

    if %1% == test (
    echo Hallo
    )
    else (
    echo Tschuess
    )

    wird also nicht funktionieren. Es kommt die Fehlermeldung, dass „else“ nicht bekannt sei.

    if %1% == test (
    echo Hallo
    ) else (
    echo Tschuess
    )

    funktioniert hingegen wie gewünscht.

Schreibe einen Kommentar