수색…


비고

<parameter> 를 라벨에 추가하여 함수에 시작 변수를 추가 할 수 있습니다. 이 시작 변수는 %n 통해 액세스 할 수 있습니다. 여기서 n은 시작 변수의 번호입니다 (첫 번째 변수에는 %1 , 두 번째 변수에는 %2 , % 1 - % 9에는이 %n 메서드, 10-255 변수에는 Shift 명령 사용).
예 :

:function <var1> <var2>

call :function param1 param2 를 사용하면 param1%1 로 액세스 할 수 있고 param2%2 로 액세스 할 수 있습니다.
참고 : <parameter> 는 꼭 필요한 것은 아니지만 가독성을 높이는 데 도움이됩니다.

많은 변수들이 날고있을 때 유용한 유용한 트릭은 %n 과 함께 setlocalendlocal 을 사용하는 것입니다. setlocalendlocal 본질적으로 명령 프롬프트의 별도 인스턴스이기 때문에 함수를 설정합니다. 변수는 프레임에있는 동안에 만 고정됩니다.

setlocalendlocal 을 사용하고 있으며 전역 값을 반환하는 경우이 값을 사용하십시오.

endlocal & set var=variable

전역 variable varvariable 설정합니다. 이 변수들을 여러 변수에 대해 함께 연결할 수 있습니다.

endlocal & set var=variable & set var2=variable number 2

전역 변수 varvariable 로 설정하고 전역 값 var2variable number 2 합니다.
코드 블록의 코드도 동시에 수행되므로이를 수행 할 수도 있습니다.

if "%var%"=="" (
    endlocal
    set %~2=10
)

그러나, 당신 이것을 할 수 없습니다 .

if "%var%"=="" (
    set %~2=10
    endlocal
)

단순 함수

call :FunctionX
rem More code...

:FunctionX
rem Some code here.
goto :eof

이것은 매우 간단한 함수입니다. 함수는 한 번에 여러 명령을 수행하는 프로그램 내 명령입니다. 함수는 레이블을 작성하고 코드를 삽입하여 작성되며 일단 완료되면 goto :eof 또는 exit /b <ErrorlevelYou'dLike> 를 추가하여 호출 된 위치로 리턴합니다. 함수는 call :functionname adparams 와 함께 call :functionname adparams 됩니다.

매개 변수가있는 기능

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

함수가 별도의 일괄 처리 파일 인 것처럼 추가 매개 변수를 call 에서 가져옵니다.
참고 : <parameter> 는 필수는 아니지만 가독성을 높이는 데 도움이됩니다.

기능 setlocal 및 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

setlocal , endlocal 섹션의 섹션 내부에서 변수가 호출자의 변수와 분리되어 있기 때문에 % var1 % 및 % var2 %가 변경되지 않은 이유는 무엇입니까?

모두 결합하기

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

이것은 기본 함수, setlocalendlocal 및 인수를 사용하여 홀수 함수를 만듭니다.

배치 파일의 익명 함수

익명 기능 기술은 사실 사용 CALL 명령은 내부적으로 사용 GOTO 서브 루틴 호출 및 인쇄 도움말 메시지를 남용하는 경우 변수를 두 번 확장을을 :

@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

익명 함수는 CALL 뒤에 정의 된 경우에만 호출 할 수 있습니다 (대괄호 내에서 CALL 이 실행되는 경우 대괄호 마무리 컨텍스트 이후). 외부 스크립트 에서는 호출 할 수 없지만 일반적인 함수 호출보다 느립니다.

다른 배치 파일에서 함수 호출

library.cmd 라는 파일을 만들 수 있습니다.

@echo off

echo -/-/- Batch Functions Library -/-/-

:function1
    echo argument1 - %1
    goto :eof

나머지 파일의 코드없이 : function1 만 실행하려면 호출자 bat에 label1 : function1 이라는 레이블을 넣고 다음과 같이 사용하십시오.

@echo off

call :function1 ###
exit /b %errorlevel%

:function1
    library.bat %*

출력은 다음과 같습니다 ( library.cmd 의 함수 외부에있는 코드는 실행되지 않습니다).

인수 1 - ###

자세한 정보는이 부분을 확인 하십시오 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow