MS-DOS バッチファイル作成に奮闘

仕事で、MS-DOSのバッチファイルを作成しました。
MS-DOSとは言っても、WindowsXPコマンドプロンプトです。(当然だよね)

作成するバッチファイルは、超簡単にまとめると、下図のようなモノです。
(rsh,rcpは禁止)

まあ、さほど手間がかからず作成できるかなって思っていましたが、着手してみたら、結構手間取ってしまいましたね。

MS-DOSのバッチ仕様を知らないと以外と苦労することが多かった気がします。
実際、予定の工数より、かなり時間を費やしてしまいました。

【バッチファイルで思いがけず時間をかけたところ】
(1) setlocal enabledelayedexpansionの定義をせず、FOR分などの変数参照がECHO OFFになってうまく動作しない。
遅延環境変数の展開の有効、無効で%変数名%が!変数名!となる。
どこまで、インタプリタが評価しているのか、未だ分からずだが、とりあえずできた。

(2) IF文の(は、空白を置いて書く。
誤 if 条件(
正 if 条件 (
ネット上のサンプルなど、空白を入れていないものがあって、なかなか、この文法に気づかなかった。(自分の注意も足りなかったかな)

(3) Linuxのコマンドtee相当の機能がないので、ログファイル出力と標準出力を同時に行うため自分で作成した。
call :echoex 表示したい内容
:echoex
echo %*
echo %*>> %LOGF%   %LOGF%は、ログファイルのパス+ファイル名
exit /b

(4) 配列を使う方法の模索、それに時間を費やしてしまった。

【バッチファイル以外で苦労したところ】
(1) teratermマクロのsendln実行結果を簡単に取得できず、コマンドエラーになったときの措置を完全に対応できていない。
コマンド実行メッセージを拾って、メッセージ内のキーワードを拾って、エラーならマクロ停止ってするかなと思案中。面倒だな、まだ、あまりマクロを知らないし・・

(2) Linux側で、taratermマクロからtarコマンドを使用して、tgzを作成しようとしたとき、アーカイブ化するディレクトリがないときなど、当然エラーになるのだが、アーカイブ作成をやめてしまう時と、エラーのままアーカイブを作成する時がある。
エラーとなったら、作成しないでやめてほしいのだが・・・


以上、苦労した点です。
他のも多少ありますが、とにかく大変(面倒)でした。

MS-DOSのバッチファイル作成に時間を費やすなら、VBSを使用したほうが、全然よかったかなってちょっと後悔しています。

でも、かなり勉強にはなりましたね。

できたバッチファイルを見ると、こんなもんかと思いますが、作成中は、かなり大変だなって思いながら作成していました。
図の流れの逆版も作成したので、トータル 3Kくらいのステップになりました。
まだまだ、テクニックを駆使してないので、泥臭いコーディングになっているのかもしれませんね。
ただ、callが使えるのは、Goodでした。
それなりの構造化ができます。


ふー、疲れたけど、終わってみれば面白かったかも!?