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 .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow