2012-12-05 6 views

답변

13

예, SETLOCAL을 사용해야합니다. ENDLOCAL이 발행되면 이전 환경이 복원 될 수 있도록 변경 사항이 지역화됩니다.

모든 스크립트 처리가 끝나고 명령 줄 컨텍스트로 돌아 오면 모든 활성 SETLOCAL에 대해 암시 적 ENDLOCAL이 실행됩니다. 명시 적으로 ENDLOCAL을 발행 할 필요는 없습니다.

또한 스크립트 (또는 루틴)가 호출되면 CALL이 완료 될 때 CALLed 루틴 내에서 _ 행된 모든 활성 SETLOCAL에 대한 내재 된 ENDLOCAL이 있습니다.

불리는 루틴 내
var=pre-CALL value 
var=within CALL value 
var=pre-CALL value 

ENDLOCAL이 롤백하지 않습니다 : (이 다치게하지 않습니다하지만)

@echo off 
set var=pre-CALL value 
echo var=%var% 
call :test 
echo var=%var% 
exit /b 

:test 
setlocal 
set var=within CALL value 
echo var=%var% 
exit /b 

출력 예를 들어, 루틴의 끝에서

을 ENDLOCAL을 넣을 필요가 없습니다 CALL 전에 발행 된 SETLOCAL. 예를 들어.

@echo off 
setlocal 
set var=VALUE 1 
setlocal 
set var=VALUE 2 
echo before call: var=%var% 
call :test 
echo after call: var=%var% 
endlocal 
echo after endlocal: var=%var% 
exit /b 

:test 
setlocal 
set var=VALUE 3 
echo within local CALL context: var=%var% 
endlocal 
echo within CALL after 1st endlocal: var=%var% 
endlocal 
echo within CALL cannot endlocal to before CALL state: var=%var% 
exit /b 

결과 : 실행이 완료되면

before call: var=VALUE 2 
within local CALL context: var=VALUE 3 
within CALL after 1st endlocal: var=VALUE 2 
within CALL cannot endlocal to before CALL state: var=VALUE 2 
after call: var=VALUE 2 
after endlocal: var=VALUE 1 
+0

봐요 ... 바로 SETLOCAL 이후 그래서 기본적으로 모든 설정 작업이 삭제됩니다. 나는 그것을 시도 할 것이다. 이것은 변수를 직접적으로 제거합니다. – ttback

관련 문제