2012-01-17 1 views
0

나는 SETLOCAL ENABLEDELAYEDEXPANSION 명령을 많이 사용하는 스크립트를 가지고 있기 때문에 그런 식으로 스크립트를 시작합니다 (덜 두통). 그러나 각 인스턴스를 이스케이프 처리하지 않고 ! 문자를 사용할 수 없습니다 (오류 로깅 섹션 = D)에 대해 ! s의 긴 행을 만들고 싶습니다. 그리고 그 중 하나 하나를 벗어나고 싶지 않습니다. .일시적으로 SETLOCAL을 인터럽트

SETLOCAL에서 일시적으로 벗어난 다음 이전에 만든 모든 변수를 원래대로 유지하여 다시 입력하는 방법이 있습니까 SETLOCAL?

예를 들어

:

SETLOCAL ENABLEDELAYEDEXPANSION 
set var=HELLO 
ECHO %var% 
ENDLOCAL 

SETLOCAL ENABLEDELAYEDEXPANSION 
ECHO %var% 

이 제 2 ECHO 당신의 이전 값을 제공하지 않습니다 var

편집 : ^ 당신이 !SETLOCAL ENABLEDELAYEDEXPANSION 내부

+0

'setlocal DisableDelayedExpansion ... Endlocal'은 무엇인가요? – jeb

+0

@jeb하지만 endlocal 후에 setlocal enabledelayedexpansion을 활성화해도 이전 setlocal 명령에서 생성 된 모든 변수가 유지되지 않습니다. – Mechaflash

답변

1
setlocal DisableDelayedExpansion 
set var=Value! with! many! Bangs! 
setlocal EnableDelayedExpansion 
echo !var! 
1

탈출을 허용하지 않습니다 Aacini가 보여주는 것처럼 그것을 중첩시킬 수 있습니다.
아니면 반환 기술을 사용하거나 또한 느낌표에 사용할 수있는 반환 기술은 ^^!

Setlocal EnableDelayedExpansion 
echo 1^^!^^!^^!^^!^^!^^!^^! 
REM *** Or use a self removing quote 
echo !="! 2^!^!^!^!^!^! 

Setlocal DisableDelayedExpansion 
echo 3 !!!!!!!! 
set var=Hello 
(
    endlocal 
    rem Bring the value behind the endlocal barrier 
    set var=%var% 
) 

echo var is still there, %var% 

와 EnableDelayed 블록 내부 !을 탈출하지만, 그것은 조금 더 복잡하다.
Make an environment variable survive ENDLOCAL