3連休は基本的にお休みだったんだけど、家でちょっとお仕事。週初めまでにMS-DOSでバッチを作らないといけない。バッチの内容は大して難しくないんだけど、MS-DOSで書かないとダメなのがきつい。shで書きたい…perlで書きたい…でもMS-DOS…。
MS-DOSのバッチなんてまともに書いたことないので、調べながら作成。日曜に参考書ないかなと本屋をうろつくもMS-DOSの参考書なんて全然見当たらない。結局Webで調べながら作りました。
そのMS-DOS、普段UNIXのshやperlに慣れてるせいかMS-DOSの機能のしょぼさに愕然とする。まぁshなんかも外部コマンドのsedやexprを使って本領発揮するわけなんだけど、MS-DOSにはそんな便利な外部コマンドが標準でついてないしね。cygwinとかを入れてもOKならいいんだけどねぇ。
で、今回一番ハマったところが環境変数の展開ルール。どうやら環境変数の展開はバッチが始まるときにいっせいに行われるぽい(このあたりの詳しい動作は未だによくわからない)。shやperlの気分でバッチを各と痛い目みますぜ、ほんとに。ここで何時間悩んだことか_| ̄|○
これを回避するには「遅延環境変数の展開」を有効にすればOK。そのときのコマンドがこれ↓
setlocal enabledelayedexpansion
…ここに色んな処理…
endlocal
この2行のコマンドで挟んであげて、環境変数を%VAL%じゃなくて!VAL!みたいに書く。
…というかこんなのわかんねぇよ。やっぱり日曜に参考書を意地でも探し出しておくべきだったか。
いや、その前に「遅延環境変数の展開」をデフォルトにしようよ。って思うのは俺だけなのだろうか…。
作成日:2007/07/17 02:13:39