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.
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
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.