#Intro
普段ほぼMSDOSでバッチなんて書かないのですが
業務上必要になり久々に書いたときにはまったのメモ。
#概要
DOSはなにも指定しないと変数をループやIFブロックなど条件式の外で
展開してしまいその評価結果が保持されてしまうようです。
この場合変数の遅延展開オプションが必要になります。
SET enabledelayedexpansion
また遅延展開する変数の記載は
%変数%
ではなく!変数!
で指定する必要があります。
そんなばかな。ひどいもんだ。
IFブロックの中で記載した処理結果を%ERRORLEVEL%
をとって
判断するときとかもこれにあたるので注意が必要でした。
#サンプル
###だめなパターン
SET COUNT=0
FOR /F %%i IN ('DIR') DO SET /A COUNT=%COUNT%+1
ECHO %COUNT%
結果は1がたくさん。
FORをまわす前のCOUNT=0がセットされてしまい
固定化されるためです。
###いいパターン
SET enabledelayedexpansion
SET COUNT=0
FOR /F %%i IN ('DIR') DO SET /A COUNT=!COUNT!+1
ECHO %COUNT%
想定どおり。
#感想
DOSなんてこの世からなくなればいいと思います。