Windows - バッチ - ループ内の変数

 クラウディア
1. ループ内の変数の不思議
2. ループ内の変数の書き方

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%」 は変数展開されていないのです。

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!」 のように記述するということです。
JETBOY
 
 
カウンタバックグラウンド