한 줄의 for 루프 내에서 지역 변수를 설정하려고 합니다.

한 줄의 for 루프 내에서 지역 변수를 설정하려고 합니다.

프롬프트에서 이 명령을 실행하면 왜 작동하지 않는지 잘 모르겠습니다. setlocal은 배치 파일에서만 호출할 수 있습니까?

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

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

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

업데이트: 저는 윈도우 8.1을 사용하고 있습니다.

답변1

질문은 대답입니다. cmdWindows NT에서 Microsoft의 명령 해석기를 사용하고 있는 것이 분명합니다 . 해당 명령 해석기에서는 setlocal명령 스크립트를 사용하여 호출할 때 실제로 아무런 효과가 없습니다.

다른 명령 해석기의 기능은 setlocal명령 스크립트와 함께 호출할 수 있는지 여부, 중첩 여부, 제어하려는 항목을 제어하는지 여부가 다릅니다.

setlocalMicrosoft의 OS/2 버전 1에 있는 원본은 cmd현재 드라이브, 디렉터리 및 환경을 저장했습니다. 명령 스크립트 없이는 아무런 효과가 없었습니다. 그리고 둥지를 틀지 않았습니다. 보시다시피 지난 25년 동안 명령은 다양한 방향으로 확장되었습니다.

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

for /l %i in (1,1,3) do (text=%i 설정 및 Hello %text% 에코 설정)
… 인쇄하고 싶은 내용을 인쇄합니다.

추가 읽기

  • SETLOCAL.Windows XP 명령줄 참조 A~Z. TechNet. 마이크로 소프트 회사.
  • SETLOCAL. 명령/TCC 도움말을 받아보세요. JP 소프트웨어.
  • 조나단 드 보인 폴라드. SETLOCAL. 32비트 명령 해석기 명령 참조.
  • SETLOCAL. OS/2 워프 명령 참조. IBM 주식회사.
  • J. 에밋 빔(1988).그림으로 표시된 OS/2. 워드웨어 출판. ISBN 9781556220531. p. 40

답변2

대답은 매우 간단했습니다!

for /l %i in (1,1,3) do (set text=%i & echo Hello %text% 호출)

관련 정보