Batch: if und else – Syntax verstehen

Heute musste ich wieder einmal länger überlegen, warum mein Batch-Skript nicht funktionierte. Dies ist der super intuitiven Syntax geschuldet, die ich ab und an wieder vergesse wenn ich länger nichts größeres damit machen musste. Grundsätzlich sind komplexere Sachen in Batch eher „schwierig“ umzusetzen und werden leicht zu Spaghetti-Code. Das hindert aber die meisten Softwarehersteller auch im Jahr 2019 nicht daran einige Teile ihrer Softwarelösung mit Hilfe eines ganzen Haufens von Batch-Skripten zu realisieren, die sich dann auch noch gegenseitig mit irgendwelchen Parametern aufrufen. Dann braucht man sich als Admin auch nicht schlecht fühlen so etwas zu machen 😀

Zum Glück kann man in Batch-Dateien if- und else-Verzweigungen nutzen. Lediglich die Syntax bzw. die Eigenart in Batch-Dateien, die man penibel einhalten muss, vergesse ich dabei desöfteren.

 

Einzeiler

Grundsätzlich funktioniert es schon mal, wenn man einen solchen Einzeiler nutzt:

Wichtig ist, dass man die Leerzeichen hinter der if-Bedingung wie auch vor und hinter dem else setzt, ansonsten funktioniert es schon nicht! Die Ausführung der Batch-Datei wird dann auch sofort ohne Rückmeldung abgebrochen, selbst wenn in der Datei ein pause-Befehl folgt.

Wenn kein else-Zweig benötigt wird kann man sogar komplett auf Klammern verzichten, z. B. so:

Würde man hier noch „else echo something else anhängen“, dann würde die CMD „something else echo something else“ ausgeben wenn die Bedingung zutrifft. Dies liegt daran, dass in diesem Beispiel der echo-Befehl nicht ahnen kann, dass da noch ein else-Zweig folgt.

 

Mehrzeiler

Wenn etwas mehr passieren soll, dann benötigt man natürlich mehrere Zeilen. Dabei muss der Aufbau wie folgt sein:

Das else muss auf jeden Fall hinter der geschlossenen Klammer des if-Zweigs und vor der offenen Klammer des else-Zweigs stehen. Um das ganze nicht zu verwirrend zu gestalten, sollte man das else am besten mit den beiden Klammern immer in eine eigene Zeile setzen. Die schließende Klammer des else-zweigs kann man auch hinter den letzten Befehl des else-Zweigs schreiben. Das sieht meistens aber auch eher bescheiden aus.

 

Verschachtelung

If-Abfragen zu verschachteln ist möglich, wird aber relativ schnell ekelig. Je nach Formatierung zerhaut man sich die Batch-Datei und sie wird nicht mehr ausgeführt. Eine zweite oder auch eine dritte if-Ebene ist aber möglich.

So lässt sich folgende Batch-Datei ohne Probleme ausführen:

Es ist allerdings beispielsweise nicht möglich innerhalb einer verschachtelten if-Abfrage vernünftig den Error-Level zu bestimmen. Hier bietet sich leider eher eine Nutzung der bei Programmierern eigentlich verhassten Sprungmarken mittels goto-Befehl an. Auch wenn dies eher Spaghetti-Code wird lassen sich dadurch Syntax-Probleme umgehen.

 

Schreibe einen Kommentar