[windows] Windows バッチスクリプトと格闘してみる

windowsバッチスクリプトとなぜか格闘・・・。
最近はほとんど自分で手を動かしてなかったのにえらいギャップだ。しかもバッチ(ほぼまったく)書いたこと無いのに。。。

For文が大変(0.5時間ほど理解に要する)というのと、バッチから呼び出したバッチに含まれるコマンドのエラーコードを取ってきて親バッチに返してその結果を持って終了するという処理の実装に悩む(1.5時間ほど)。
しかも、インターネット環境が無いところで作ったものだから、Windows Helpだけが頼り・・・。


Windows 2003環境だったのだが、マニュアルをみただけでは、Forの1ループに対して複数コマンド(実際にはあるコマンドを実行した上で、そのエラーレベルを判定するというもの)を実行する方法がわからなかったので、別バッチを作って無理やり実装・・・。

For (delims=*)%i in (list) do another.bat %%i

なんかうまく動かない。
マニュアルをひたすら検索(Windowsヘルプをこれだけ検索した事は今まで無い)。
どうやらcallというのがあるらしい。
これを使えば、別プロセス実行環境を作るわけではなくて、親バッチの実行環境でやってくれそうという当たりをつけて最トライ。

set error=0
For (delims=*) %i in (list) do call another.bat %%i
if %error% NEQ 0 Exit /b %errorlevel%

another.bat

command
error=%errorlevel%

なんとなくうまく行った気になる。

ネットワーク環境のあるところに戻ってから、Google検索してみてこの記事を発見。
う〜ん。サブルーチンの動きが複雑。
callでバッチを呼ぶと、これに準じる動きなっているのかな?
でも、サブルーチン方式の方がエラー処理が楽そう
今日のGoogleの生産性効果:3.0 H (おいくら?)