0

for ループでインデックスを使用して変数に格納しようとしています。このコードでバッチファイルを書きました:

FOR /L %%x IN (1,1,3) DO (
    ECHO %%x
    SET tmp=prefix_%%x.suffix
    ECHO tmp is %tmp%
)

それを実行すると、次のようになります。

1
tmp is prefix_3.suffix
2
tmp is prefix_3.suffix
3
tmp is prefix_3.suffix

私はそれが次のようになることを期待します:

1
tmp is prefix_1.suffix
2
tmp is prefix_2.suffix
3
tmp is prefix_3.suffix

私は何を間違っていますか?!

4

1 に答える 1

4
Setlocal enableextensions enabledelayedexpansion

FOR /L %%x IN (1,1,3) DO (
    ECHO %%x
    SET tmp=prefix_%%x.suffix
    ECHO tmp is !tmp!
)

for コマンド内のすべてのブロックは、読み取り時に評価されます。%%x の変更は、ループ中に変更されることが知られている特別な変数であるため見られますが、%tmp% は開始時に一度だけ変換され、再評価されません。遅延展開を有効にし、sintax を に変更する!tmp!と、アクセスされるたびに変数を再評価するように cmd に指示されます。

于 2013-11-14T13:02:30.630 に答える