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