人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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%
)


●質問者: tetlis
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● hissssa
●110ポイント

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!
)


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


tetlisさんのコメント
うまくいきました。ありがとうございます!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ