To become IT specialists

プログラミングに関する技術メモです。

コマンドプロンプトで変数の値が消える!?

コマンドプロンプトでループ処理をする際に変数の値が消えていた。
調べてみると「遅延環境変数」というものを有効にすると解決することができた。

hoge.txt

aaa
bbb
ccc
@echo off
SET STR=
FOR /F %%a IN (hoge.txt) DO (
  SET STR=%STR%%%a
)
ECHO %STR%
PAUSE

hoge.txtの文字列をループ処理で結合したいのだが、
この結果は「ccc」となる。なぜ???


これは変数の“即時展開”というもので、ループの中の%STR%が先に評価されてしまい このような事象が起こるらしい。

そこで、遅延環境変数を有効にしてみる。「SETLOCAL enabledelayedexpansion」の部分のこと。

@echo off
SETLOCAL enabledelayedexpansion
SET STR=
FOR /F %%a IN (hoge.txt) DO (
  SET STR=!STR!%%a
)
ECHO %STR%
PAUSE
ENDLOCAL