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 .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow