YanaKen's Page TOP YanaKen's BBS
YanaKen's PC Life>復刻・DOS/V面白探し  related sites: FPCUグループ
YanaKenのDOS/V面白探し YanaKen

第5回 DOS5.0バッチファイル無用の?雑学知識

1992年12月8日 by (C) YanaKen(柳澤健二)

 DOS/Vでも他の国産マシンでも、MS-DOS系のパソコンを活用する上で、いやが応でも身につけねばならない一般教養(?)の一つに「バッチファイル」があります。
 まあ、まわりにDOSに滅法詳しい人がいて一から十までセットアップしてくれる場合は知らなくても済みますが、そうでなければ、システム起動時に自動始動される「AUTOEXEC.BAT」ぐらいは、中で何が起こっているのか把握しておく必要があるし、自分で直接手を加えたくなるケースもよくあることでしょう。
 多くの市販ソフトは、自動的にCONFIG.SYSやAUTOEXEC.BATに必要な情報を書き加えたり書きかえたりしてくれますが、そうやって書き込まれた内容が本当に適切なものかどうかは、ユーザーの使用状況しだいでかなりアヤシい場合もあったりします。
 もちろんAUTOEXEC.BATだけでなく、アプリケーション起動用、あるいはその他こまごまとした作業の自動化のために自分でバッチファイルを作りたい、という場合も多いでしょう。というわけで今回は「DOS/V上のバッチファイル」にまつわるお話をいくつか書きつらねてみることにします。

●@で消えるECHO OFF●

 DOS4.0以降のバッチファイルでは、各コマンドの先頭に「@」という文字を入れておくことで、その行自体の内容を画面に表示せずに実行できるようになりました。このおかげで、
「バッチファイルを実行すると、たいていまずECHO OFFという別段見たくもない文字が表示されてしまう」
 という、バージョン3.X以前のDOSの経験者にはおなじみの現象が解消しています。
 実際、DOS/Vの標準的なAUTOEXEC.BAT、あるいはSWITCH.BATなどの中身を覗いてみると、どちらも最初の1行は、

@ECHO OFF

 という形式で始まっています。
 もちろん@はECHO以外の頭にもつけられますので、たとえば次のように「コマンド行を消したい行だけ@をつける」という使い方も可能です。

@ECHO バックアップを開始します。
@PAUSE
BACKUP C:\ A: /S /M

 ところで、探求心旺盛な人だと、こんな疑問を持つかもしれません。
「@という文字はファイル名として使用可能なはず。ということは、名前の頭が@で始まるプログラムもあり得るはずだが、これを実行したい場合はどうするのか?」
 確かに、たとえば@TEST.EXEという名前のプログラムファイルは存在し得ます。で、これをバッチファイルから実行しようと、

@TEST

 と書き込んでおいても、残念ながら@TEST.EXEは実行できません。こういう名前のプログラムを実行するためには、必ず、

@@TEST

 と、@を2つ続けて書かねばなりません。この場合、最初の@は「この行を画面にエコーするな」という意味になりますので、結局「@で始まるコマンドをバッチファイル内で画面にエコーさせることは不可能」ということになります。ファイル名の1文字めに@を使わなければ済む話ではありますが、ちょっとややこしい話ではありますね。

●DosShellのメニューに
バッチ処理を登録する●

 DOS5.0/V標準のビジュアル・シェルであるDosShellは、さまざまなアプリケーションを登録して、Enterキー、またはマウスのダブルクリックだけで実行できるメニュー画面を持っています。
 この「メニュー」に登録する個々の内容は単純なプログラム名でもかまわないのですが、実はバッチファイル的に一連の操作をまとめて登録しておくことも可能です。
 たとえば英語環境でしか動かないソフトを日本語環境のDosShellから起動したい場合は、次のように一連のコマンドを“ ; ”(半角スペース・セミコロン・半角スペース)で区切って書いておけばよいのです。

CHEV US /F >NUL ; USPCSOFT

(余談ですが、終了後の日本語環境への復帰は、DosShellが自動的にやります)
 もちろん、あらかじめ別に作っておいたバッチファイルをDosShellのメニューに登録する、というかたちもとれますが、メニューの数だけバッチファイルをいちいち作るよりは、まとめてメニューに登録しておいた方がディスクスペースの節約になることは確かです。
 ちなみに、実際にメニューからアプリケーションを実行している間、ディスクの様子を調べてみると、この一連のコマンドはバッチファイル(名前は不定)に書き出されて実行されていることがわかります。

●再実行可能なAUTOEXEC.BATを作る●

 手持ちのパソコンの細かい環境整備作業を行なっているとき、パソコン本体をリセットせずにAUTOEXEC.BATだけ再実行したいケースがけっこうあります。
 たとえばAUTOEXEC.BATに書きこんであるPATHの定義を書きかえたとすると、この新しいPATHを有効にするにはAUTOEXEC.BATをもう一度実行しなければなりません。
 ところがAUTOEXEC.BATには各種常駐プログラムの導入命令も入っているのが通例。それを再実行したのではTSRの二重常駐を招いたりして具合が悪い場合があります。
 この問題の解決方法はいくつか考えられますが、とりあえず簡単なのは、
「2度めに実行されたときはTSRの常駐導入は省略するよう、あらかじめAUTOEXEC.BATを改造しておく」
 というやり方でしょう。たとえば次のようにします。

@ECHO OFF
IF NOT "%SYS%"=="" GOTO ENVSET
SET SYS=C:
(以下、TSRの起動など、1度目だけ有効にしたい内容をここに書く)
:ENVSET
PATH=C:\DOS;....
SET TEMP=....

 DOS/Vの標準的なAUTOEXEC.BATでは、環境変数SYS(SWITCHコマンドで利用される)が最初に設定されるようになっています。
 ということは、この環境変数が設定されていたとすれば、そのパソコンは起動直後の状態ではない(AUTOEXEC.BATが再実行された)とわかるわけで、2度めには不要な部分をGOTOでスキップさせてしまうことができるというわけ。このテは、うっかりAUTOEXEC.BATを再実行してしまった場合の安全策としても有効です。

●CALLを利用する●

 もうひとつの方法として、AUTOEXEC.BATの中身をいくつかのブロックに分け、それぞれ別のバッチファイルにしてしまう方法も考えられます。ちょっと「オタク」っぽいかもしれませんが、CALLという、これまたDOS4.0以降でサポートされたバッチコマンドを利用すると、こんなAUTOEXEC.BATも作れてしまうのです。

@ECHO OFF
CALL C:\DOS\TSR.BAT TSRを起動
CALL C:\DOS\PATHSET.BAT PATHを設定
CALL C:\DOS\ENVSET.BAT 環境変数

 CALLというのは、あるバッチファイル中から別のバッチファイルを実行し、そっちが終わったらまた元のバッチファイルに戻ってこい、という命令です。
 つまり他のバッチファイルを一種のサブルーチンとして実行できるわけで、しかも呼ばれたバッチファイル内で環境変数を変更したり、あるいはTSRを常駐させたりしても何ら問題ありません。
 というわけで、パソコンの起動時にはこのAUTOEXEC.BATを実行し、一方、あとからPATHの設定だけを変更したい場合はPATHSET.BATを編集し直して直接実行すればOK、ということになるわけです。
 もっとも、多くのアプリケーションのインストーラはこういう形式のAUTOEXEC.BATの存在を想定していないため、いちいち自分で保守する手間がかかるのがタマにキズではありますが。

 ……というところでそろそろ紙数も尽きました。ホントはこのCALLのもっと便利な使い方も紹介したいと思ってたんですが、その話はまた今度ということで、なにはともあれ新年おめでとうございました。


<DOS/Vコマンド・リファレンスTOPへ>
このページの先頭に戻る
DOS/V magazine公式サイト Vwalker.com
YanaKen's Page>YanaKen's PC Life>復刻・DOS/V面白探し related sites: FPCUグループ
P
R
P
R
YanaKen's Page本日の当サイト表示回数(主要ページ合計)回 訪問者数