Batch-Tricks: Bibliotheken

Man kann mit call andere Batchdateien aufrufen und ihnen auch Parameter übergeben. Dieser Aufruf funktioniert wie ein Unterprogramm. Gegeben nun den Fall, man hat einen Haufen nützlicher Funktionen, möchte aber nicht immer eine eigene Datei für jede von ihnen oder will nicht immer den Inhalt als Unterprogramm in andere Batchdateien einfügen.

Mit einem relativ einfachen Muster kann man hier alle Funktionen in eine große Batchdatei werfen und trotzdem noch einzeln aufrufen. Ich habe hier im Folgenden mal so etwas vorbereitet, zusammen mit ein wenig zusätzlichem Kram, der vielleicht in so einem Szenarium nützlich sein könnte:
rem Das Sprungziel merken, damit es shift nicht zerstört
set target=%1
rem Sprungziel wegwerfen, damit Unterprogramme Zugriff auf %1, … haben
shift
rem menschenfreundliche Parameterliste basteln
call :get_param_list %
goto %target%
:bla
echo Bla wurde mit folgenden Parametern aufgerufen: %PARAMS%
goto :EOF
:blubb
echo Blubb wurde mit folgenden Parametern aufgerufen: %PARAMS%
goto :EOF
:get_param_list
rem %
enthält noch alle Parameter, daher wieder den ersten wegwerfen
shift
rem Wir brauchen hier verzögerte Auswertung
setlocal enableextensions enabledelayedex­pansion
:get_param_lis­t_loop
set PARAMS=%PARAM­S%, %1
shift
if not%1“=="" goto get_param_list_loop
rem das erste überflüssige Komma wegwerfen
set PARAMS=%PARAM­S:~2%
endlocal & set PARAMS=%PARAMS%
goto :EOF

Der Code besteht hier im Wesentlichen aus ein wenig Initialisierung, namentlich dem set target=%1 und shift, um das Sprungziel zu erhalten und für folgenden Code alles normal aussehen zu lassen. Das Unterprogramm get_param_list ist eigentlich nur dazu da, daß man ein wenig komischen Code zum Anschauen hat sowie ein bißchen Debug-Code fürs Testen. Der Rest sind nur Labels, die die Unterprogramme markieren, die wir sammeln wollen, jedes wie üblich mit goto :EOF abgeschlossen. Die Batch selbst ist also nichts weiter als eine Art switch-Anweisung, die die Funktion auswählt, die man ihr mit dem ersten Parameter übergibt.

Eine einzelne Funktion aus dieser Batch aufzurufen, ist also im Grunde recht einfach (angenommen, wir haben die Batch lib.cmd genannt):
call lib blubb param1 param2 param3 …
was folgende Ausgabe erzeugt:
Blubb wurde mit folgenden Parametern aufgerufen: param1, param2, param3, …

Voilà, und schon haben wir eine Art Bibliotheken oder sogar Namespaces. Wenn man will, kann man das ganze immer noch schachteln, das lasse ich dann als Übung für den geneigten Leser.

Kommentare

Neuen Kommentar abgeben

The content of this field is kept private and will not be shown publicly.