매우 간단한 배치 파일의 두 가지 예가 있습니다.
변수에 값 할당하기 :
@echo off
set FOO=1
echo FOO: %FOO%
pause
echo on
예상대로 다음과 같은 결과가 발생합니다.
FOO: 1
Press any key to continue . . .
그러나 IF NOT DEFINED 블록 안에 동일한 두 줄을 배치하면 :
@echo off
IF NOT DEFINED BAR (
set FOO=1
echo FOO: %FOO%
)
pause
echo on
이로 인해 예기치 않은 결과가 발생합니다.
FOO:
Press any key to continue . . .
이것은 IF와 관련 이 없어야 합니다. 블록이 분명히 실행되고 있습니다. if 위에 BAR을 정의하면 예상대로 PAUSE 명령의 텍스트 만 표시됩니다.
무엇을 제공합니까?
후속 질문 : setlocal없이 지연 확장을 활성화 할 수있는 방법이 있습니까?
이 간단한 예제 배치 파일을 다른 배치 파일에서 호출하는 경우 예제는 FOO를 설정하지만 LOCALLY 만 설정합니다.
예를 들면 다음과 같습니다.
testcaller.bat
@call test.bat
@echo FOO: %FOO%
@pause
test.bat
@setlocal EnableDelayedExpansion
@IF NOT DEFINED BAR (
@set FOO=1
@echo FOO: !FOO!
)
다음이 표시됩니다.
FOO: 1
FOO:
Press any key to continue . . .
이 경우 CALLER에서 지연 확장을 활성화 해야하는 것으로 보이며 번거로울 수 있습니다.
!
사용하십시오^^^!
(두 번 이스케이프). 그렇지 않으면 "지연된 확장"기능이이 기능을 사용합니다.