환경 지연 변수의 원인과 두 가지 요점
개요
최근에 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되고 있었던 것입니다.
환경 지연 변수
이것을 해결하는 것이 環境遅延変数
입니다.
환경 지연 변수란 변수를 읽는 타이밍을 지연시킬 수 있는 변수로 다음과 같이 나타냅니다.
@echo off
set name=hoge
for /f %%a in (hoge.txt) do (
set full_name=%%a%name%
echo %full_name%
)
이 원인은
変数を読み込むタイミング
가 문제였습니다.%로 묶인 변수는 해당 행을 읽을 때 확장됩니다.
()로 묶인 명령은 한 줄로 간주됩니다.
입니다. 진지한 수수께끼.
즉, 몇번 for문을 돌려도 full_name이 초기화 상태에서 echo되고 있었던 것입니다.
환경 지연 변수
이것을 해결하는 것이 環境遅延変数
입니다.
환경 지연 변수란 변수를 읽는 타이밍을 지연시킬 수 있는 변수로 다음과 같이 나타냅니다.
수정한 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 작성
Reference
이 문제에 관하여(환경 지연 변수의 원인과 두 가지 요점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/n-nabe/items/b54bab5e03f9ce04ede6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)