batch-file
Les fonctions
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.