batch-file
functies
Zoeken…
Opmerkingen
U kunt startvariabelen aan de functie toevoegen door <parameter>
aan het label toe te voegen. Deze startvariabelen zijn toegankelijk met %n
waarbij n het nummer van de startvariabele is ( %1
voor de eerste, %2
voor de tweede. Deze %n
methode werkt voor% 1 -% 9. Voor parameter 10 - 255 hebt u nodig om de Shift- opdracht te gebruiken).
Bijvoorbeeld:
:function <var1> <var2>
Zodra u call :function param1 param2
, is param1
toegankelijk met %1
en param2
met %2
.
Opmerking: de <parameter>
is niet strikt noodzakelijk, maar het helpt bij de leesbaarheid.
Een handige truc die handig is wanneer veel variabelen rondvliegen, is om setlocal
en endlocal
in combinatie met %n
. setlocal
en endlocal
maken de functie in wezen een eigen, afzonderlijk exemplaar van de opdrachtprompt, variabelen die erin worden gezet, blijven alleen bestaan als deze zich in het frame bevinden.
Als u setlocal
en endlocal
gebruikt en globale waarden retourneert, gebruikt u dit.
endlocal & set var=variable
Dit stelt de globale waarde var
op variable
. U kunt deze aan elkaar koppelen voor meerdere variabelen.
endlocal & set var=variable & set var2=variable number 2
Dit stelt de globale variabele var
op variable
en de globale waarde var2
op variable number 2
.
Omdat code in codeblokken ook gelijktijdig wordt uitgevoerd, kunt u dit ook doen.
if "%var%"=="" (
endlocal
set %~2=10
)
Maar je kunt dit niet doen.
if "%var%"=="" (
set %~2=10
endlocal
)
Eenvoudige functie
call :FunctionX
rem More code...
:FunctionX
rem Some code here.
goto :eof
Dit is een heel eenvoudige functie. Functies zijn in-programma-opdrachten die meerdere opdrachten tegelijkertijd uitvoeren. Functies worden gemaakt door een label te maken en er code in te plaatsen, en zodra dit is gedaan, voegt u een goto :eof
of exit /b <ErrorlevelYou'dLike>
die terugkeert naar waar het werd aangeroepen. Functies worden opgeroepen met call :functionname adparams
.
Functie met parameters
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
Hiermee worden de extra parameters uit de call
overgenomen alsof de functie een afzonderlijk batchbestand was.
Opmerking: de <parameter>
is niet nodig, maar het helpt bij de leesbaarheid.
Functie Gebruik van setlocal en 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
Wanneer in de sectie setlocal
, endlocal
sectie, zijn variabelen gescheiden van de variabelen van de beller, daarom zijn% var1% en% var2% niet gewijzigd.
Ze allemaal combineren
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
Dit maakt gebruik van de basisfunctie, setlocal
en endlocal
en argumenten om een vreemde kleine functie te maken.
Anonieme functies in batchbestanden
Anonieme functietechniek maakt gebruik van het feit dat de opdracht CALL
intern GOTO
wanneer subroutine wordt aangeroepen en misbruik maakt van hulpberichten afdrukken met variabele dubbele uitbreiding :
@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
U kunt een anonieme functie alleen aanroepen als deze is gedefinieerd na de CALL
(of na het beëindigen van haakjescontext als de CALL
tussen haakjes wordt uitgevoerd). Het kan niet worden aangeroepen vanuit een extern script , maar is langzamer dan normaal.
Belfuncties vanuit een ander batchbestand
Laten we het volgende bestand met de naam library.cmd hebben :
@echo off
echo -/-/- Batch Functions Library -/-/-
:function1
echo argument1 - %1
goto :eof
Om alleen de : functie1 zonder de code van de rest van het bestand uit te voeren, moet u een label : functie1 in de beller-bat plaatsen en deze als volgt gebruiken:
@echo off
call :function1 ###
exit /b %errorlevel%
:function1
library.bat %*
de uitvoer zal zijn (de code buiten de functie in library.cmd
wordt niet uitgevoerd):
argument1 - ###
Voor meer info check dit .