한 줄의 for 루프 내에 로컬 변수를 설정하려고합니다. & for /l %i in (1,1,3) do

프롬프트에서이 명령을 실행 한 이유가 확실하지 않으면 배치 파일에서만 setlocal을 호출 할 수 있습니까?

setlocal EnableDelayedExpansion & for /l %i in (1,1,3) do (set text=%i & echo Hello !text!)

예상되는 결과는 다음과 같습니다.

안녕하세요 1
안녕하세요 2
안녕하세요 3

업데이트 :
Windows 8.1을 사용하고 있습니다.



답변

문제는 답입니다. cmdWindows NT에서 Microsoft의 명령 인터프리터를 분명히 사용하고 있습니다 . 그 명령 인터프리터는 setlocal실제로 명령 스크립트로 호출 할 때 아무런 영향을 미치지 않습니다.

다른 명령 해석기 setlocal는 명령 스크립트로 호출 할 수 있는지 여부, 중첩 여부 및 제어하려는 항목을 제어하는지 에 따라 다릅니다 .

OS / 2 버전 1 setlocal의 Microsoft에서 원본 cmd은 현재 드라이브, 디렉토리 및 환경을 저장했습니다. 명령 스크립트로는 효과가 없었습니다. 그리고 둥지하지 않았다. 보시다시피 지난 4 세기 동안이 명령은 다른 방향으로 확장되었습니다.

차이점이있는 한 가지 이유는 JP Software의 TCC가 복합 명령에서 변수 확장을 점진적으로 수행하고 수행하려는 작업을 수행하기 위해 지연된 변수 확장 트릭이 필요하지 않기 때문입니다. 이:

(1,1,3)에서 / l % i의 경우 (set text = % i & echo Hello % text %)

… 인쇄하려는 것을 인쇄합니다.

추가 자료

  • SETLOCAL. Windows XP 명령 줄 참조 A–Z. TechNet. 마이크로 소프트 회사.
  • SETLOCAL. Command / TCC 도움말을 참조하십시오. JP 소프트웨어.
  • 조나단 데 보인 폴라드. SETLOCAL. 32 비트 명령 인터프리터 명령 참조.
  • SETLOCAL. OS / 2 Warp 명령 참조 IBM Corporation.
  • J. Emmett Beam (1988). 그림 OS / 2 . 워드웨어 출판. ISBN 9781556220531 p. 40

답변

대답은 매우 간단합니다!

(1,1,3)에서 / l % i의 경우 (call set text = % i & echo hello % text %)


답변