Zugegebenermaßen sind Batch-Dateien noch immer sehr verbreitet und halt auch mit einfachen Windows-Bordmitteln zu erstellen. Natürlich sind diese auch in ihrem Funktionsumfang stark beschnitten. So gibt es nur absolute Basics mit denen man programmieren kann. Funktionen gehören leider nicht zum Batch-Standard-Repertoire. Aber mit den vorhandenen Strukturen kann man sich behelfen und somit doch Funktionen abbilden. Wie man solche Funktionen in Batch-Dateien baut, erfährst du im folgenden Artikel.
Was ist eine Funktion?
Falls das Verständnis für die Funktionsweise einer Funktion fehlt, folgt hier eine kurze Einführung. Eine Funktion macht vieles einfacher, da man diese immer wieder einfach aufrufen kann, um einen gleichen Arbeitsschritt nicht immer wieder „neu programmieren“ zu müssen.
Durch Funktionen ist es also möglich, Code in immer wieder verwendbare Blöcke zu unterteilen. Eine Funktion kann man also als eine Gruppe von Anweisungen betrachten, die eine bestimmte Aufgabe ausführen und auch eine Rückgabe liefern können.
Ein einfaches Beispiel für eine Funktion in PowerShell könnte wie folgt aussehen:
1 2 3 4 5 |
function addNumbers($a,$b) { return ($a+$b) } addNumbers 2 3 |
In diesem Beispiel wird eine Funktion mit dem Namen „addNumbers“ definiert, die zwei Parameter „a“ und „b“ erwartet. Die Funktion addiert diese beiden Parameter und gibt das Ergebnis der Berechnung mittels „return“ zurück. Im Beispiel wird die Funktion dann mit den Werten „2“ und „3“ aufgerufen und es wird der Wert „5“ kalkuliert.
Durch die Verwendung dieser Funktion können wir nun in unserem Programm jederzeit auf diese spezifische Aufgabe zugreifen, ohne den Code immer wieder neu schreiben zu müssen. Wir können die Funktion einfach anrufen und die erforderlichen Parameter bereitstellen, um das gewünschte Ergebnis zu erhalten.
Ebenso sollte man auch wissen, wie man mit Schleifen in Batch-Dateien arbeiten kann. Dazu gibt es hier einen eigenen Artikel.
Funktions-Implementierung in Batch-Dateien
In einer Batch-Datei gibt es leider eigentlich keine Funktionen. Deshalb muss man sich der vorhandenen Befehle und Strukturen bedienen. Hierzu benötigt man den call-Befehl bzw. Sprungmarken / Label und kann mit deren Hilfe „tricksen“.
Der Aufbau einer Funktion ist dabei wie folgt:
1 2 3 |
:function_name rem hier irgendetwas machen EXIT /B 0 |
Der Funktionsname sollte möglichst gut beschreiben, was die Funktion macht und am Ende muss man die Funktion mit Exit verlassen um in den weiteren Ablauf der Batch-Datei zurückzuspringen:
1 2 3 4 |
:setindex SET /A index=2 echo index ist %index% EXIT /B 0 |
Platzierung der Funktionen in der Batch-Datei
Die Funktionen müssen entweder an den Anfang oder das Ende der Batch-Datei gesetzt werden und vom Rest der Batch-Datei mit Hilfe des goto-Befehls separiert werden. Dies erledigt man beispielsweise so, wenn man die Funktionen an den Anfang setzen möchte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
goto script rem Funktionen hier hin packen: :function_name1 rem hier irgendetwas machen EXIT /B 0 :function_name2 rem hier irgendetwas machen EXIT /B 0 :script rem hier beginnt das eigentliche Skript |
So könnte es aussehen, wenn man die Funktionen am Skriptende platzieren will:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
rem hier endet das eigentliche Skript goto end rem Funktionen hier hin packen: :function_name1 rem hier irgendetwas machen EXIT /B 0 :function_name2 rem hier irgendetwas machen EXIT /B 0 :end |
Aufruf der Funktion in einer Batch-Datei
Aufgerufen wird die Funktion dann mittels des „CALL“-Befehls, mit man auch andere Batch-Dateien aufrufen kann:
1 |
CALL :function_name |
Goto in C#, Python, PHP, Excel VBA, Bash, PowerShell nutzen?
Batch: if und else - Syntax verstehen
While- und Until-Schleifen in PowerShell und Batch
Wie lange läuft mein PC schon? – PC Laufzeit auslesen unter Windows 10
Wochentag in einer Batch-Datei ermitteln
CMD/Powershell: Ping-Ergebnis mit Errorlevel auswerten
Skript um Zeit-basiert Dateien zu tauschen
Die Gefahr durch mit Adminrechten ausgeführte Skripte
Powershell und CMD: Clear um Konsole zu leeren?
Java-Anwendungen über CMD oder Powershell starten
Kommandozeile aus Explorer in geöffnetem Ordner
Umlaute in Batch-Dateien – immer wieder schön