batch-file
funktioner
Sök…
Anmärkningar
Du kan lägga till startvariabler till funktionen genom att lägga till <parameter>
till dess etikett. Dessa startvariabler kan nås med %n
där n är startvariabelns nummer ( %1
för den första, %2
för den andra. Denna %n
metod fungerar för% 1 -% 9. För parameter 10 - 255 behöver du för att använda Skift- kommandot).
Till exempel:
:function <var1> <var2>
När du använder call :function param1 param2
, kan param1
nås med %1
och param2
med %2
.
Obs! <parameter>
är inte strikt nödvändig, men den hjälper till med läsbarheten.
Ett snyggt trick som är användbart när många variabler flyger runt är att använda setlocal
och endlocal
i tandem med %n
. setlocal
och endlocal
gör i setlocal
endlocal
funktionen till sin egen separata instans av kommandotolken, variabler som är inställda i den bara sticker runt medan den är i ramen.
Om du använder setlocal
och endlocal
och returnerar globala värden, använd detta.
endlocal & set var=variable
Detta ställer in det globala värdet var
till variable
. Du kan kedja dessa för flera variabler.
endlocal & set var=variable & set var2=variable number 2
Detta ställer in globala variabeln var
till variable
och det globala värdet var2
till variable number 2
.
Eftersom kod i kodblock också utförs samtidigt, kan du göra det också.
if "%var%"=="" (
endlocal
set %~2=10
)
Men du kan inte göra det.
if "%var%"=="" (
set %~2=10
endlocal
)
Enkel funktion
call :FunctionX
rem More code...
:FunctionX
rem Some code here.
goto :eof
Detta är en mycket enkel funktion. Funktioner är kommandon i programmet som gör flera kommandon åt gången. Funktioner görs genom att skapa en etikett och sätta kod i den, och när den är klar lägger du till en goto :eof
eller exit /b <ErrorlevelYou'dLike>
som återgår till där den åberopades. Funktioner åberopas med call :functionname adparams
.
Funktion med parametrar
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
Detta tar de ytterligare parametrarna från call
som om funktionen var en separat batchfil.
Obs! <parameter>
är inte nödvändig, men det hjälper till med läsbarheten.
Funktion Använda setlocal och 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
När du är inne i avsnittets setlocal
, endlocal
sektionen, är variabler separerade från anroparens variabler, varför% var1% och% var2% inte ändrades.
Kombinera dem alla
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
Detta använder den grundläggande funktionen, setlocal
och endlocal
och argument för att skapa en udda liten funktion.
Anonyma funktioner i batchfiler
Anonym funktionsteknik använder det faktum att CALL
kommandot använder internt GOTO
när subroutine kallas och missbrukar utskrift av hjälpmeddelanden med variabel dubbel expansion :
@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
Du kan ringa en anonym funktion endast om den är definierad efter CALL
(eller efter att ha fäst parentes-sammanhanget om CALL
utförs inom parentes). Det kan inte ringas från ett externt skript , men är ett långsammare samtal än normalt.
Ringfunktioner från en annan batchfil
Låt oss ha följande fil som heter bibliotek.cmd :
@echo off
echo -/-/- Batch Functions Library -/-/-
:function1
echo argument1 - %1
goto :eof
För att bara köra : -funktionen1 utan koden för resten av filen bör du lägga en etikett : funktion1 i den anropande bat och använda den så här:
@echo off
call :function1 ###
exit /b %errorlevel%
:function1
library.bat %*
utgången kommer att vara (koden utanför funktionen i library.cmd
körs inte):
argument1 - ###
För mer information, kolla detta .