MSX Datapack wiki化計画

7章 バッチファイル

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 コマンドがMSX-DOSに与えられ、それが内部コマンドでない場合、その名前で拡張子がCOMまたはBATのファイルが検索されます。カレントディレクトリ中で見つからないと、現在の検索パスが参照されます。(P.21「PATH」を参照)。COMファイルが見つかると、ロードして実行します。BATファイルが見つかると、MSX-DOSはバッチファイルの実行を開始します。

 バッチファイルとはコマンドのリストを含むテキストファイルであり、これらのコマンドは一時に1行ずつファイルから読み込まれて、あたかもキーボードから入力されたかのように実行されます。5章「コマンド」で説明したコマンドのうち、ECHOやPAUSE、IFなどは、主としてバッチファイル中で使用するために用意されています。

 それぞれのコマンドが読み込まれると、通常即座に実行されます。ただしECHOという環境変数を「SET ECHO ON」コマンドを使って「ON」にセットすると、各コマンドの実行前にコマンド行自体を画面上に表示することができるようになります(8章の環境変数についての記述を参照)。コマンド行はその場合、%パラメータの代入(後述)が実行されてからエコーされます。コマンド「SET ECHO OFF」は、これを通常の状態に戻します。

 バッチファイルを起動するコマンド行では、他のコマンドや外部プログラム名と同様パラメータをバッチファイルの名前の後に続けることができます。これらのパラメータは%0〜%9を指定することによって、バッチファイル中のどこからでもアクセスすることができます。%1がコマンド行で指定される最初のパラメータで、%2が2番目のパラメータなどとなります。%0はバッチファイルそれ自身の名前です。%数字は元のコマンド行のパラメータで置き換えられ、バッチファイル中のどこででも使用できます。コマンド行で実際に「%」記号を使用するには、2つの%(「%%」)を与えなければならず、これは単一の%に変換されます。

 また環境変数名の前後に%をつけることにより、環境変数をバッチ中に取り込むことができます(これは、ver.2.31から追加された機能です)。%環境変数名%は環境変数の設定値に置き換えられ、バッチファイル中のどこででも(バッチファイル中に限らずコマンド行でも)使用できます。
 バッチファイル中のコマンドの実行が何らかの理由で中断された場合(特にCTRL+STOPやCTRL+Cが押された場合)、次のようなプロンプトが出力されます。

Terminate batch file (Y/N)?
バッチ処理を中止しますか (Y/N)?

 これに対して「Y」を答えると、バッチファイル全体の実行が停止します。応答が「N」であると、バッチファイルの実行はバッチファイル中の次のコマンドから続行されます。

 MSX-DOSがバッチファイル中のコマンドを実行し終わると、バッチファイル中の次のコマンドをディスクから読み出さなければならない場合があります。その場合正しいディスクがドライブ中にないとプロンプトが出力されます。例えば、バッチファイルが最初ドライブAから実行された場合、次のようなプロンプトが出力されます。

Insert disk for batch file in drive A:
Press any key to continue
バッチファイルの入ったディスクをドライブA:にいれて
何かキーを押して下さい.

 正しいディスクが挿入され、キーが押されると、バッチファイルの実行は正常に続行します。
 以下に示すのは非常に単純なバッチファイルであり、最初のいくつかのパラメータを表示するだけのものです。

ECHO Prameter 0 = %0
ECHO Prameter 1 = %1
ECHO Prameter 2 = %2
ECHO Prameter 3 = %3

 これをMYBAT.BATとすると、コマンドMYBAT a b cは以下の出力を行います。

Prameter 0 = MYBAT
Prameter 1 = a
Prameter 2 = b
Prameter 3 = c

 最初にMSX-DOSが起動されると、AUTOEXEC.BATという特殊なバッチファイルが検索され、もしあれば実行されます。これにはどんなMSX-DOSコマンドを含めても良く、その中にはRAMディスクを設定するRAMDISKコマンドのように、立ち上げ時に1度だけ実行すればよい初期化コマンドなどを指定しておくと便利です。

 この場合、AUTOEXEC.BATにはひとつの%パラメータが%1として渡されます。これはMSX-DOSが起動されたドライブ名で、コロンが後に付いた通常のドライブ名の形を取ります。

 もうひとつの特殊なバッチファイルはREBOOT.BATです。これはDisk BASICを使用した後で、MSX-DOSが再起動されるときに実行されます。AUTOEXEC.BATファイルと同様、MSX-DOSが再起動したドライブが%1パラメータとして渡されます。

 最初であれ、2度目以降であれ、MSX-DOSを起動するときには、通常いくつかのコマンドを実行する必要があり、これらをREBOOTバッチファイルに入れておきます。それらは、AUTOEXECバッチファイルをコマンドREBOOT %1で終わらせることによって、AUTOEXECバッチファイルから実行することができます。REBOOTバッチファイル中に入れておくコマンドの一例は、外部コマンドの検索パスを設定するPATHコマンドです。このコマンドを使用して検索パスを設定すると場合、%1を使用して、どのドライブから起動しても正しいパスを設定することができます。

 バッチファイル中のコマンドが別のバッチファイルの名前である場合、2番目のバッチファイルが続いて実行されます。それが終了すると、制御はコマンドインタープリタに戻り、最初のバッチファイルには戻りません。つまり、バッチコマンドは「チェイン」します。
 バッチファイルを「ネスト」する、つまり上記の場合に最初のバッチファイルへ制御を戻すには、COMMAND2コマンド(P.84「COMMAND2」を参照)に、2番目のバッチファイルの名前をパラメータとして渡します。その場合、2番目のバッチファイルが終了すると、最初のバッチファイルがCOMMAND2コマンドの後のコマンドから続けられます。

 一般的なAUTOEXECバッチファイルの例を次に示します。

ECHO AUTOEXEC executing
RAMDISK 100
RAMDISK
COPY COMMAND2.COM H:\
REBOOT %1

 一般的なREBOOTバッチファイルの例を次に示します。

ECHO REBOOT executing
PATH H:\,%1\UTILS,%1\BATCH
SET SHELL=H:\COMMAND2.COM
SET TEMP=H:\
SET PROMPT ON
H:

 AUTOEXECバッチファイルが実行されると、「AUTOEXEC executing」のメッセージを表示し、RAMディスクを最大100Kで設定します。次に別のRAMDISKコマンドで作成されたRAMディスクの実際の大きさを表示します。そしてCOPYコマンドでCOMMAND2.COMをRAMディスク上にコピーし、再ロードを高速にできるようにします。最後にREBOOTバッチファイルを起動し、それに%1パラメータ(ブートドライブ名)を渡します。

 REBOOTバッチファイルはメッセージを表示し、それからPATHを設定します。パス中の最初の項目はAUTOEXECバッチファイルで作成されたRAMディスクを参照しており、その他の項目はMSX-DOSがブートされたディスク(つまり%1)中のディレクトリを参照しています。次にCOMMAND2.COMがRAMディスクから高速に再ロードできるようにSHELL環境変数をセットアップし、RAMディスク上にパイプファイルを作成するようにTEMP環境変数を設定します。最後にPROMPTをONにセットして、カレントディレクトリがプロンプトとして表示されるようにし、RAMディスクをカレントドライブにします。