source

작동하지 않는 경우 Windows 배치 SET 내부

ittop 2023. 5. 22. 21:41
반응형

작동하지 않는 경우 Windows 배치 SET 내부

이 스크립트를 실행하는 경우(.bat 파일에서):

set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo %var2%
)

항상 받는 것은:

ECHO is on.

즉,var2변수가 실제로 설정되지 않았습니다.누가 왜 그런지 이해할 수 있게 도와줄 수 있나요?

var2가 설정되었지만 라인의 확장echo %var2%블록이 실행되기 전에 발생합니다.
이 시간에var2비어 있습니다.

따라서 delayedExpansion 구문이 존재하며 다음을 사용합니다.!대신에%구문 분석 시간이 아닌 실행 시간에 평가됩니다.

다음을 사용하기 위해 참고하십시오.!추가 진술setlocal EnableDelayedExpansion필요합니다.

setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo !var2!
)

파티에 조금 늦었지만 이 상황을 처리하는 또 다른 방법은 외부에서 계속 진행하는 것입니다.if,이것처럼.

set var1=true
if "%var1%"=="true" (
    set var2=myvalue
)
echo %var2%

또는 사용goto통사론

set var1=true
if "%var1%"=="true" (
    set var2=myvalue
    goto line10
) else (
    goto line20
)
. . . . .
:line10
echo %var2%
. . . . . 
:line20

이러한 방식으로 "시간 내에" 확장되므로 필요하지 않습니다.setlocal EnableDelayedExpansion중요한 것은 스크립트의 설계를 다시 생각해본다면 그렇게 할 수 있다는 것입니다.

언급URL : https://stackoverflow.com/questions/9102422/windows-batch-set-inside-if-not-working

반응형