Rekursion mit Batch-Dateien

Wer häufig gegen Microsoft, Windows und DOS wettert und Linux und seine Kommandozeile lobt, darf nicht vergessen, dass die Windows-Kommendozeile eine ähnliche Funktionalität bietet, die allerdings sicherlich nicht so ausgereift ist. Das hängt aber mit der von Anfang an gegebenen Ausrichtung auf eine einfache Bedienung zusammen, durch die es nie nötig sein sollte, in der Konsole Programme zu kompilieren.

Durch Zufall habe ich beim Testen der Batch-Datei für den komfortablen runas-Aufruf herausgefunden, dass sogar die Rekursion über die DOS-Kommandozeile möglich ist. Die Rekursion funktioniert genauso, wie man es vielleicht aus Programmiersprachen kennt: Ein Programm, oder in diesem Fall eine kleine Batch-Datei, enthält einen Befehl, über das es bzw. sie sich selbst aufruft. Dadurch ist eine Zerlegung in Teilprobleme nach dem “Teile und herrsche”-Prinzip möglich, was die Bearbeitung komplexer Aufgaben wesentlich erleichtert.

Um diese Funktionalität in der Kommandozeile zu erleben, ist nur folgendes nötig: In einer Batch-Datei muss ein Selbstaufruf enthalten sein. Eine Endlosrekursion ist damit problemlos möglich, allerdings habe ich trotz eines Batch-Kurses auf die Schnelle kein funktionierendes Beispiel mit einer kleinen Berechnung hinbekommen, das nach endlich vielen Schritten endet.

[code]@ECHO OFF

REM Simple recursion with a batch file
REM Author: Lennard Timm, URL: 71grad.de

SET A=%1

IF %A% LSS 3 (
ECHO 1
) ELSE (
SET A=A-1
test.bat %A%
)

ECHO %A%[/code]

Erinnert mich an funktionale Programmierung. Eigentlich endet dieses “Programm” schon, weil es bei Eingaben größer gleich 3 in den else-Zweig geht und die Rekursion startet. Nach kurzer Zeit stürzt allerdings das Fenster mit der Kommandozeile ab — deshalb zählt es nicht. Ich warte auf eine lauffähige Batch-Datei in den Kommentaren.

2 Gedanken zu „Rekursion mit Batch-Dateien

  1. Lennard Timm Artikelautor

    Um den Fortschritt zu dokumentieren, kommentiere ich meinen eigenen Beitrag: Ich habe eine lauffähige Version, die allerdings folgenden Fehler ausgibt:

    ****** B A T C H – R E K U R S I O N überschreitet Stapellimit ******
    Rekursionszähler=917, Stapelauslastung=90 Prozent
    ****** B A T C H V E R A R B E I T U N G A B G E B R O C H E N ******

    Diese Fehlermeldung tritt wohlgemerkt dann auf, wenn ich die Batch-Datei mit dem Parameter 3 aufrufe — 917 Aufrufe scheinen mir da etwas zuviel zu sein. Eine Batch-Datei eignet sich wohl doch nicht so gut zur Rekursion.

  2. bobschi

    Ist zwar schon fünf Jahre alt, aber nachdem man es über Google noch immer findet, kommentiere ich das Mal für alle die sich wundern, warum das ad infinitum läuft und nicht geht.

    Um in einer Variable eine Berechnung ausführen zu können, musst du SET mit der Option “/A” aufrufen, also:
    [CODE]SET /A A=A 1[/CODE]

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>