« たまにはせっせと | メイン | 私のメニエル病 »

まて、あわてるな

20080327a049

20081204

 

ということがあったんだ。

べ、別にこれがやりたかったわけじゃないんだからねッ!

 

 

久しぶりにコマンドプロンプトでバッチを作っていて良くわからないのがあった。

 

IF (NOT) ERRORLEVEL Sum do ELSE do

 

コマンドプロンプトでは各コマンドを実行した後に戻り値があるわけだが、その戻り値がERRORLEVELという環境変数の中に格納される。

ここで勘違いしていたのが、これは「IF文」ではなくて「IF ERRORLEVEL文」だということ。

 

具体的にどう違うかというと、

  1. IF %ERRORLEVEL% EQU 0 do
  2. 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でそんな制約なかったもん(´・ω・`)

トラックバック

このエントリーのトラックバックURL:
http://www.manaduru.org/cgi-bin/mt/mt-tb.cgi/144

コメント (2)

あしびん:

cmdの貧弱さは異常。
ここはWindowsPowerShellで
(使える実環境なんてほとんどn)

匿名:

PowerShellってどうなの?w
使い勝手が良くわからないんだけど。

ってか、そもそも2008とか使わないよね、ね!


私的に、kshとbash使えるcygwin乗せたほうが絶対にいいと思うw

コメントを投稿

About

2008年12月05日 11:30に投稿されたエントリーのページです。

ひとつ前の投稿は「たまにはせっせと」です。

次の投稿は「私のメニエル病」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.