5. Windows - バッチ - ループ内の変数
- 5.1 ループ内の変数の不思議
- 5.2 ループ内の変数の書き方
5.1 ループ内の変数の不思議
前ページに書いたように
BBB
CCC
DDD
という内容の AAA.txt があるとして
@ECHO OFF
FOR /F %%A IN (AAA.txt) DO (
ECHO %%A
)
というバッチファイルを実行すると
BBB
CCC
DDD
という実行結果が得られるわけです。
ではこの %%A を変数に入れて出力しようと
@ECHO OFF
FOR /F %%A IN (AAA.txt) DO (
SET B=%%A
ECHO %B%
)
ECHO %B%
というバッチファイルを書いて実行すると
ECHO は <OFF> です。
ECHO は <OFF> です。
ECHO は <OFF> です。
DDD
という実行結果になるのです。
ECHO %B%
は
ECHO
と書いているのと同じ効果しか得られません。
つまり、%B% は変数展開されていないのです。
5.2 ループ内の変数の書き方
結論から書くと
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F %%A IN (AAA.txt) DO (
SET B=%%A
ECHO !B!
)
ECHO %B%
と書くと結果は
BBB
CCC
DDD
DDD
となります。
2行目の
SETLOCAL ENABLEDELAYEDEXPANSION
は、ループ内の変数を有効化するためのおまじないです。
6行目の
ECHO !B!
は、ループ内では変数を %B% のように書くのではなく !B! のように記述するということです。
|
|