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 enabledelayedexpansion
:get_param_list_loop
set PARAMS=%PARAMS%, %1
shift
if not „%1“=="" goto get_param_list_loop
rem das erste überflüssige Komma wegwerfen
set PARAMS=%PARAMS:~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