Windows 배치 파일 - enabledelayeDexpansion query
-
21-08-2019 - |
문제
기존 게시물을 읽었습니다 스택 오버플로 그리고 그물에서 몇 가지 독서를했습니다. 머리카락을 너무 많이 잃기 전에 질문을 게시 할 시간이라고 생각했습니다!
Windows XP SP3에서 실행하려면 두 번 클릭하는 배치 파일 내에 다음 코드가 있습니다.
SETLOCAL ENABLEDELAYEDEXPANSION
::Observe variable is not defined
SET test
::Define initial value
SET test = "Two"
::Observe initial value is set
SET test
::Verify if the contents of the variable matches our condition
If "!test!" == "Two" GOTO TWO
::First Place holder
:ONE
::Echo first response
ECHO "One"
::Second Place holder
:TWO
::Echo second response
ECHO "Two"
::Await user input
PAUSE
ENDLOCAL
기본적으로 조건부를 사용하여 스크립트를 탐색 할 수 있는지 여부를 설정하려고합니다. 가변 범위와 변수 확장이 지연되는 문제를 겪고있는 것이 분명하지만, 내가 잘못하고있는 일에 대해 약간 길을 잃었습니다.
누구든지 나를 올바른 방향으로 가리킬 수 있습니까?
해결책
즉각적인 문제는 변수를 < "2"> 값으로 설정한다는 것입니다.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
::Observe variable is not defined
SET test
::Define initial value
SET test = "Two"
::Observe initial value is set
SET test
echo %test%
echo..%test %.
::Verify if the contents of the variable matches our condition
If "!test!" == "Two" GOTO TWO
::First Place holder
:ONE
::Echo first response
ECHO "One"
::Second Place holder
:TWO
::Echo second response
ECHO "Two"
::Await user input
PAUSE
ENDLOCAL
생산 :
Environment variable test not defined
test = "Two"
. "Two".
"One"
"Two"
Press any key to continue . . .
"세트 테스트"가 변수를 출력하는 이유는 "set t"가 같은 이유와 같은 이유입니다. 특정 이름의 변수가 없으면 해당 이름으로 시작하는 모든 변수를 출력합니다.
세트 명령은 또한 까다로운 작은 짐승이며 '='캐릭터를 둘러싼 공간을 좋아하지 않습니다. 그것은 환경 변수 이름과 그에 지정된 값에 그것들 (그리고 따옴표)을 통합합니다. 대신 사용 :
set test=Two
또한 지연된 확장을 사용하는 경우 % 테스트 % 및! 테스트 이후에는 중요하지 않습니다! 동일하게 확장 할 것입니다. 다음과 같은 진술에 유용합니다.
if "!test!" == "Two" (
set test=TwoAndABit
echo !test!
)
내부 에코는 TwoAndabit을 출력하는 반면, 전체 IF 진술이 발생할 때 확장되는 %테스트 %는 2를 출력하게됩니다.
그럼에도 불구하고 나는 항상 일관성을 위해 지연된 확장을 사용합니다.
다른 팁
세트 명령은 마지막이 아닌 맹금 문자를 통해 동등한 부호를 겪은 후 모든 것을 취합니다. 당신의 명령 ...
SET test = "Two"
... 가변 테스트를 문자열 2가 아니라 선행 공백과 인용문으로 "2"값으로 설정하고 있습니다.
그래서 테스트 할 때 ...
If "!test!" == "Two" GOTO TWO
당신은 정말로 테스트하고 있습니다 ...
If " "Two"" == "Two" GOTO TWO