2008-10-20 5 views

답변

2

명백한을 [I 게시하기에 충분한이 가치를이에 대한 답을 알고 있지만 생각] 우리가 루프 내에서 env 변수를 재설정했다면 출력이 "이후"라고 생각할 것입니다.

하지만 출력은 실제로 "이전"입니다. 이유는 명령이 실행될 때가 아니라 명령을 읽을 때 인터프리터가 .bat 파일에서 변수 대체를 수행하기 때문입니다. 따라서 복합 문에 대해 if 문이 처음 발생할 때 본문의 변수가 평가됩니다.

당신이 지연된 환경 변수 확장을 사용하여이 작업을 할 수 있습니다 (활성화)가 필요합니다. 활성화되어있는 경우, 당신은 할 수 있습니다 :

설정 VAR =

전에 "전" "%의 VAR의 %"== (

설정 VAR = 후 경우,

에코 VAR! 당신은 cmd.exe를을 시작할 때/V 옵션을 사용하여 지연된 환경 변수 확장을 사용할 수 있습니다

).

은 [스토리는 - 우리 중 많은 사람은 여전히 ​​더 나은 스크립팅 도구 등 메이크업 절차 등을 분명히 존재하는 드라이브에 .bat 파일 유산을 사용하지만 항상 옵션을 사용하지. 나는이 문제를 잠시 접어 들었고, 같은 일로 머리카락을 뽑은 두 명의 사람들을 최근에 발견했다. 따라서 통역사가 변수 대체 방법을 이해하는 것이 유용합니다.]

0

퍼센트의 VAR의 %를 대체 명령 실행 전에 발생한다. 여러 줄로 여러 명령이 분산되어 있지만 괄호로 묶인 (...)은 cmd.exe 파서가 전체 명령을 하나의 명령으로 읽도록합니다. 따라서 실행되는 내용은 다음과 같습니다.

set VAR=before 

if "before" == "before" (

set VAR=after; 

echo before 

) 

인터프리터에 표시됩니다.

이 단순한 물건보다 더 무엇을하려고 배치 파일 처리 오히려 고통스러운 암탉을 많은 것들 중 하나입니다.