windowsのバッチファイルで、下記のようなコードを書きました。

思ったような表示にならないのはなぜでしょうか?

理想→
A
A
B
B
C
C

現実→
A
C
B
C
C
C


書いたコード→
@ECHO OFF
FOR %%i IN (A B C) DO (
SET temp_drive=%%i
ECHO %%i
ECHO %temp_drive%
)

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/02/01 19:30:51
  • 終了:2014/02/01 20:54:56

回答(1件)

id:hissssa No.1

hissssa回答回数423ベストアンサー獲得回数1272014/02/01 20:14:43

ポイント110pt

Windowsバッチファイルの仕様として、ループ内で動的に変化する環境変数は、そのままだとループ前の状態で展開されるからです。
ご提示の例では、変数temp_driveへの値設定をループ内で行っています。本来、この設定は次の参照で使用されませんが、実行例でCが出ているのは、恐らくお使いのシステム自体に既にtemp_drive=Cが設定されているためと思われます。

ループ内で動的に変化する環境変数を扱いたい場合は、「setlocal enabledelayedexpansion」を宣言した上で、ループ内での変数参照のタグとして%でなく!で記述する必要があります。

@ECHO OFF
setlocal enabledelayedexpansion
FOR %%i IN (A B C) DO (
SET temp_drive=%%i
ECHO %%i
ECHO !temp_drive!
)


上記のように記述すれば期待通りに動作するはずです。

id:tetlis

うまくいきました。ありがとうございます!

2014/02/01 20:54:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません