2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DOSのdisabledelayedexpansionについて

Last updated at Posted at 2014-11-22

#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なんてこの世からなくなればいいと思います。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?