While- und Until-Schleifen in Batch-Dateien

In Batch-Dateien ist vieles nicht vorgesehen gewesen und mit Bordmitteln auch nicht möglich. So gibt es keine standardmäßigen Möglichkeiten Schleifen mit Abbruchbedingungen einzusetzen. Außer einer For-Schleife steht nichts zur Auswahl. Ich benötigte eine Schleife mit einer bestimmten maximalen Anzahl an Durchläufen. Diese sollte aber beim erwarteten Ergebnis auch schon früher abbrechen. Das lässt sich mit einer For-Schleife nicht realisieren. Denn man kann aus dieser nicht per goto-Befehl „ausbrechen“ . Bei Batch-Dateien ist dies nicht vorgesehen. Somit würde die Maximalanzahl an Durchläufen immer durchgeführt werden. Auch wenn das eigentliche Ziel schon beim ersten Versuch erreicht wurde. Mit Powershell wäre das einfach gewesen, steht aber leider auf den Zielsystemen nicht zur Verfügung. Das ist aber trotzdem kein Problem.

Glücklicherweise kann man sich auch in einer so rudimentären „Sprache“ wie bei Batch-Dateien die anderen Schleifenarten wie While- und Until-Schleifen einfach selber bauen. Zumindest solange man If-Abfragen und Sprungmarken mittels goto nutzen kann. Dies ist aus Performancegründen aber eigentlich zu unterlassen. Denn dieses Gespringe erhöht wohl die CPU-Last. Lediglich der Komfort leidet natürlich und der Code ist unübersichtlicher als es in einer vernünftigen Programmiersprache der Fall wäre. Aber who cares?

In folgendem Beispiel ist eine Zählschleife mit einfachen Mitteln umgesetzt worden:

Diese Schleife produziert die gleiche Ausgabe wie folgende For-Schleife:

Nämlich die einfache Ausgabe des je Durchlauf aktuellen Wertes der Zählvariable:

 

 

While-Schleifen

Eine While-Schleife wiederholt die Anweisungen solange die Prüfung der Bedingung „True“ als Wert zurückgibt. Ist also direkt am Anfang die Bedingung „False“, wird die Schleife nicht ein einziges Mal durchlaufen. Mit einer if-Abfrage, einer Hilfsvariable und goto ließe sich das z. B. so realsieren:

 

… oder ohne die Hilfsvariable, wenn eine Prüfung auf eine Bedingung nicht zu umfangreich ist und sich der Code so etwas vereinfachen lässt:

 

Im Gegensatz zur While-Schleife wird eine Do-While-Schleife mindestens einmal durchlaufen. Solange bis die Bedingung „False“ ist. Hierfür muss man nur das vorherige Beispiel umstellen. Der Anweisungsblock befindet sich nun vor der Bedingungsprüfung, also vor dem if-Block:

 

Das ganze geht natürlich auch bei der Do-While-Schleife ohne Hilfsvariable und wirkt dann aufgeräumter:

 

 

Until-Schleifen

Um eine Until-Schleife zu realisieren, müsste man theoretisch nur die Bedingungsprüfung in der While-Schleife umstellen. Die Schleife muss in diesem Fall solange laufen wie die Bedingung „False“ zurückliefert. Denn eine Until-Schleife stoppt sobald die Bedingung „True“ wird. Dies aber kein richtiger Abbruch der Schleife. Vielmehr wird immer noch eine While-Schleife die einfach nur andersherum prüft genutzt. Deshalb habe ich mich für folgende explizitere Abbruch-Variante entschieden:

 

Für eine Do-Until-Schleife muss man nur, wie schon bei der Do-While-Schleife, den Anweisungsblock vor die Bedingungsprüfung setzen. Dieser wird dann mindestens einmal durchlaufen:

 

Schreibe einen Kommentar