久しぶりにコマンドプロンプトでバッチを作っていて良くわからないのがあった。
IF (NOT) ERRORLEVEL Sum do ELSE do
コマンドプロンプトでは各コマンドを実行した後に戻り値があるわけだが、その戻り値がERRORLEVELという環境変数の中に格納される。
ここで勘違いしていたのが、これは「IF文」ではなくて「IF ERRORLEVEL文」だということ。
具体的にどう違うかというと、
- IF %ERRORLEVEL% EQU 0 do
- IF ERRORLEVEL 0 do
この二つは全然意味が違う!
1の方は「ERRORLEVELが0と同じならdoする」
2の方は「ERRORLEVELが0以上ならdoする」
ということ。後者は非常に扱いづらいと思う。そもそも戻り値ってマイナスもあるし。
でも、なんでこれがあるかっていうと、for文の中で%ERRORLEVEL%が使えないことに起因してます。なんでも、そのときの%ERRORLEVEL%はfor文そのもののERRORLEVELが格納されてしまうためでそうです。
しかし、IF ERRORLEVEL文はたとえfor文のなかでも前回実行したコマンドのERRORLEVELが使えるということになります。
IF NOT ERRORLEVEL 1 do
こうすれば、
「ERRORLEVELが1以上じゃないならdoする」
↓
「ERRORLEVELが1未満ならdoする」≒「ERRORLEVELが0ならdoする」
ということになる。戻り値がマイナスになるようなものでないのなら、使えるはず。
ここでてこずっていた私でした。kshとかbashでそんな制約なかったもん(´・ω・`)

コメント (2)
cmdの貧弱さは異常。
ここはWindowsPowerShellで
(使える実環境なんてほとんどn)
投稿者: あしびん | 2008年12月05日 22:37
日時: 2008年12月05日 22:37
PowerShellってどうなの?w
使い勝手が良くわからないんだけど。
ってか、そもそも2008とか使わないよね、ね!
私的に、kshとbash使えるcygwin乗せたほうが絶対にいいと思うw
投稿者: 匿名 | 2008年12月06日 13:35
日時: 2008年12月06日 13:35