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 .