문제

기존 게시물을 읽었습니다 스택 오버플로 그리고 그물에서 몇 가지 독서를했습니다. 머리카락을 너무 많이 잃기 전에 질문을 게시 할 시간이라고 생각했습니다!

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top