MS-DOS


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
トラックバック  ※トラックバックは承認後に表示されます。
TrackbackURL:このページのトラックバックの受付は終了しています。

トラックバックはありません。
コメント
1
kashi 17Jul2007 12:33PM
wshを使うという裏技に走らなかったあたりが男らしい。
win98以降であれば大体うまくいくのに
2
そうし 19Jul2007 02:01AM
> KASHI
あぁ、wsh使わなかったのは普通にwshの存在を完全に忘れてただけさ。
そういや4年くらい前に一度だけ使った記憶が…。

名前:

タイトル:

コメント: