SET를 사용하여 배치 스크립트에서 내 변수를 선언 한 후 cmd에서 여러 번 실행하면 명시 적으로 재설정하지 않으면 변수 값이 유지됩니다.각 배치 스크립트를 실행 한 후 변수를 지우는 방법은 무엇입니까?
하나의 실행에서 변수가 CMD를 종료하지 않고 다른 변수로 지속되지 않도록하려면 setlocal 및 endlocal을 사용해야합니까?
SET를 사용하여 배치 스크립트에서 내 변수를 선언 한 후 cmd에서 여러 번 실행하면 명시 적으로 재설정하지 않으면 변수 값이 유지됩니다.각 배치 스크립트를 실행 한 후 변수를 지우는 방법은 무엇입니까?
하나의 실행에서 변수가 CMD를 종료하지 않고 다른 변수로 지속되지 않도록하려면 setlocal 및 endlocal을 사용해야합니까?
예, 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
봐요 ... 바로 SETLOCAL 이후 그래서 기본적으로 모든 설정 작업이 삭제됩니다. 나는 그것을 시도 할 것이다. 이것은 변수를 직접적으로 제거합니다. – ttback