환경 지연 변수의 원인과 두 가지 요점

개요



최근에 for 문으로 얽히게 되었습니다. . .

다음 for문은 파일의 내용을 한 줄씩 읽고,
full_name을 echo하는 것. 이 예 감각 없음 ...
hoge.txt의 내용은


read.bat
@echo off
set name=hoge
for /f %%a in (hoge.txt) do (
    set full_name=%%a%name%
    echo %full_name%
)

이렇게 하면 다음과 같은 결과를 얻을 수 있습니다.


이 메시지 "ECHO는 OFF입니다."는 ECHO한 변수가 초기화될 때 출력되는 메시지입니다.
즉, 변수 full_name은 초기화 상태인 채로 출력되고 있다는 것입니다.
이것은 수수께끼였습니다 ...

원인



이 원인은 変数を読み込むタイミング가 문제였습니다.
%로 묶인 변수는 해당 행을 읽을 때 확장됩니다.
()로 묶인 명령은 한 줄로 간주됩니다.
입니다. 진지한 수수께끼.
즉, 몇번 for문을 돌려도 full_name이 초기화 상태에서 echo되고 있었던 것입니다.

환경 지연 변수



이것을 해결하는 것이 環境遅延変数 입니다.
환경 지연 변수란 변수를 읽는 타이밍을 지연시킬 수 있는 변수로 다음과 같이 나타냅니다.
  • 변수를 %로 묶지 않고!로 묶음
  • setlocal enabledelayedexpansion 쓰기

  • 수정한 read.bat는 이쪽

    read.bat
    @echo off
    setlocal enabledelayedexpansion
    
    set name=hoge
    for /f %%a in (C:\work\hogehoge\hoge.txt) do (
        set full_name=%%a%name%
        echo !full_name!
    )
    
    

    실행 결과는 다음과 같으며 full_name이 변경되어 출력됩니다.


    요약



    일반적으로 변수를 읽는 타이밍은
    그 행을 읽기 시작하면 ()로 묶인 명령은 한 줄로 간주됩니다.

    환경 지연 변수를 사용하면이 타이밍을 바로 이전에 변경할 수 있습니다.
    1. ()로 묶인 명령은 한 줄로 간주됩니다.
    2. setlocal enabledelayedexpansion 작성

    좋은 웹페이지 즐겨찾기