Recherche…


Remarques

Vous pouvez ajouter des variables de démarrage à la fonction en ajoutant <parameter> à son libellé. Ces variables de démarrage sont accessibles avec %n où n est le numéro de la variable de départ ( %1 pour le premier, %2 pour le second. Cette méthode %n fonctionne pour% 1 -% 9. Pour le paramètre 10 - 255, vous aurez besoin de utiliser la commande Shift ).
Par exemple:

:function <var1> <var2>

Une fois que vous utilisez l' call :function param1 param2 , param1 est accessible avec %1 et param2 avec %2 .
Remarque: le <parameter> n'est pas strictement nécessaire, mais il aide à la lisibilité.

Une astuce utile qui est utile lorsque beaucoup de variables volent est d'utiliser setlocal et endlocal en tandem avec %n . setlocal et endlocal font essentiellement de la fonction une instance distincte de l'invite de commande, les variables qu'elle endlocal que endlocal dans le cadre.

Si vous utilisez setlocal et endlocal et que vous retournez des valeurs globales, utilisez ceci.

endlocal & set var=variable

Cela définit la valeur globale var sur variable . Vous pouvez les enchaîner pour plusieurs variables.

endlocal & set var=variable & set var2=variable number 2

Cela définit la variable globale var à variable et la valeur globale var2 à la variable number 2 .
Puisque le code dans les blocs de code est également exécuté simultanément, vous pouvez également le faire.

if "%var%"=="" (
    endlocal
    set %~2=10
)

Mais vous ne pouvez pas le faire.

if "%var%"=="" (
    set %~2=10
    endlocal
)

Fonction simple

call :FunctionX
rem More code...

:FunctionX
rem Some code here.
goto :eof

C'est une fonction très simple. Les fonctions sont des commandes dans le programme qui exécutent plusieurs commandes à la fois. Les fonctions sont créées en créant une étiquette et en y insérant du code, et une fois cela fait, vous ajoutez un goto :eof ou exit /b <ErrorlevelYou'dLike> qui renvoie à l'endroit où il a été appelé. Les fonctions sont appelées avec l' call :functionname adparams .

Fonction avec paramètres

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

Cela prend les paramètres supplémentaires de l' call comme si la fonction était un fichier de lot distinct.
Remarque: le <parameter> n'est pas nécessaire, mais il aide à la lisibilité.

Fonction utilisant setlocal et endlocal

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

Lorsque dans la section setlocal , section endlocal , les variables sont séparées des variables de l'appelant, pourquoi% var1% et% var2% n'ont pas été modifiés.

Les combiner tous

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

Cela utilise la fonction de base, setlocal et endlocal et des arguments pour créer une petite fonction étrange.

Fonctions anonymes dans les fichiers de commandes

La technique des fonctions anonymes utilise le fait que la commande CALL utilise en interne GOTO lorsqu'une sous-routine est appelée et qu'elle utilise de manière abusive l'impression des messages d'aide avec une double extension variable :

@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

Vous pouvez appeler une fonction anonyme uniquement si elle est définie après l'appel CALL (ou après avoir terminé le contexte des parenthèses si l' CALL est exécuté entre parenthèses). Il ne peut pas être appelé à partir d'un script externe , mais est un appel de fonction plus lent que la normale.

Fonctions d'appel d'un autre fichier de commandes

Avons le fichier suivant appelé library.cmd :

@echo off

echo -/-/- Batch Functions Library -/-/-

:function1
    echo argument1 - %1
    goto :eof

Pour n'exécuter que le : function1 sans le code du reste du fichier, vous devez mettre une étiquette : function1 dans l'appelant et l'utiliser comme ceci:

@echo off

call :function1 ###
exit /b %errorlevel%

:function1
    library.bat %*

le résultat sera (le code en dehors de la fonction dans library.cmd n'est pas exécuté):

argument1 - ###

Pour plus d'informations, cochez cette case.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow