batch-file
Funktionen
Suche…
Bemerkungen
Sie können der Funktion Startvariablen hinzufügen, indem Sie ihrem <parameter>
hinzufügen. Auf diese Startvariablen kann mit %n
zugegriffen werden, wobei %n
die Nummer der Startvariablen ist ( %1
für die erste, %2
für die zweite. Diese %n
Methode funktioniert für% 1 -% 9. Für Parameter 10 - 255 ist dies erforderlich den Umschaltbefehl verwenden ).
Zum Beispiel:
:function <var1> <var2>
Sobald Sie verwenden call :function param1 param2
, param1
kann zugegriffen werden %1
und param2
mit %2
.
Hinweis: Der <parameter>
ist nicht unbedingt erforderlich, trägt aber zur besseren Lesbarkeit bei.
Ein netter Trick, der nützlich ist, wenn viele Variablen herumfliegen, ist die Verwendung von setlocal
und endlocal
in endlocal
mit %n
. setlocal
und endlocal
machen die Funktion im Wesentlichen zu einer eigenen Instanz der Eingabeaufforderung. Die darin enthaltenen Variablen bleiben nur im Frame erhalten.
Wenn Sie setlocal
und endlocal
und globale Werte zurückgeben, verwenden Sie diese endlocal
.
endlocal & set var=variable
Dies setzt den globalen Wert var
auf variable
. Sie können diese für mehrere Variablen miteinander verketten.
endlocal & set var=variable & set var2=variable number 2
Dies setzt die globale Variable var
auf variable
und den globalen Wert var2
auf variable number 2
.
Da Code in Codeblöcken auch gleichzeitig ausgeführt wird, können Sie dies auch tun.
if "%var%"=="" (
endlocal
set %~2=10
)
Aber das kannst du nicht .
if "%var%"=="" (
set %~2=10
endlocal
)
Einfache Funktion
call :FunctionX
rem More code...
:FunctionX
rem Some code here.
goto :eof
Dies ist eine sehr einfache Funktion. Funktionen sind programminterne Befehle, die mehrere Befehle gleichzeitig ausführen. Funktionen werden durch Erstellen eines Labels und Einfügen von Code erstellt. Sobald dies erledigt ist, fügen Sie einen goto :eof
oder exit /b <ErrorlevelYou'dLike>
der an den Ort zurückkehrt, an dem er aufgerufen wurde. Funktionen werden mit call :functionname adparams
.
Funktion mit Parametern
call :tohex 14 result
rem More code...
:tohex <innum> <outvar>
set dec=%1
set outvar=%~2
rem %n and %~n are functionally identical, but %~n is slightly safer.
goto :eof
Dadurch werden die zusätzlichen Parameter aus dem call
als wäre die Funktion eine separate Batchdatei.
Hinweis: Der <parameter>
ist nicht notwendig, hilft aber bei der Lesbarkeit.
Funktion Setlocal und Endlocal verwenden
set var1=123456789
set var2=abcdef
call :specialvars
echo %var1%, %var2%
rem More code...
:specialvars
setlocal
set var1=987654321
set var2=fedcba
endlocal
goto :eof
Innerhalb des Abschnitts setlocal
und endlocal
sind die Variablen von den Variablen des Aufrufers getrennt. Daher wurden% var1% und% var2% nicht geändert.
Sie alle kombinieren
set importantvar=importantstuff
call :stuff 123 var1
rem More code...
:stuff <arg1> <arg2>
setlocal
set importantvar=%~1
echo Writing some stuff into %~2!
endlocal
set %~2=some stuff
setlocal
set importantvar=junk
endlocal
goto :eof
Dabei werden die Grundfunktionen setlocal
und endlocal
sowie Argumente verwendet, um eine ungerade kleine Funktion zu erstellen.
Anonyme Funktionen in Batchdateien
Die Technik der anonymen Funktionen nutzt die Tatsache, dass der CALL
Befehl intern GOTO
wenn eine Subroutine aufgerufen wird, und den Druck der Hilfemeldungen mit variabler doppelter Erweiterung missbraucht:
@echo off
setlocal
set "anonymous=/?"
call :%%anonymous%% a b c 3>&1 >nul
if "%0" == ":%anonymous%" (
echo(
echo Anonymous call:
echo %%1=%1 %%2=%2 %%3=%3
exit /b 0
)>&3
Sie können eine anonyme Funktion nur aufrufen, wenn sie nach dem CALL
definiert ist (oder nach dem Beenden des CALL
wenn der CALL
in Klammern ausgeführt wird). Es kann nicht von einem externen Skript aufgerufen werden, ist aber langsamer als der normale Funktionsaufruf.
Aufrufen von Funktionen aus einer anderen Batchdatei
Wir haben die folgende Datei namens library.cmd :
@echo off
echo -/-/- Batch Functions Library -/-/-
:function1
echo argument1 - %1
goto :eof
Um nur die : function1 ohne den Code der restlichen Datei auszuführen, sollten Sie ein Label : function1 in den Aufrufer bat einfügen und so verwenden:
@echo off
call :function1 ###
exit /b %errorlevel%
:function1
library.bat %*
Die Ausgabe wird sein (der Code außerhalb der Funktion in library.cmd
wird nicht ausgeführt):
argument1 - ###
Weitere Informationen finden Sie hier .