遅延環境変数とは

reotogashi 63views 更新:2015年9月18日

windowsのバッチを書いている時にこの遅延環境変数のせいで色々と時間を取られてしまったのでまとめます。

例えばあるバッチに以下のように書くとします。

set val = a

if "%val%" == "a" (
    set val=b
    echo %val%
)

最初にval = aでaをセットし、その後bを設定しています。

これを実行すれば

b

が表示されると思いますが、実際には

a

が出力されます。

この理由は

if "%val%" == "a" (
    set val=b
    echo %val%
)

が一気に読み込まれるからです。

一気に読み込まれるので、

if "%val%" == "a" 

が読み込まれた時に

if "%val%" == "a" (
    set val=b
    echo %val%
)

if "a" == "a" (
    set val=b
    echo a
)

になってしまいます。

対策

バッチファイルの最初の方に

setlocal enabledelayedexpansion

と書いて、

if "%val%" == "a" (
    set val=b
    echo !val!
)

と変更することで

b

が表示されるようになります。

http://wa3.i-3-i.info/word12518.html

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません