MS-DOSで作業をしていると、同じような事を何度も行う事があります。例えば、
A:\>CD B:\BACKUP
A:\>CD \DATA
A:\DATA\>COPY A:*.* B: |
というようにデータのバックアップ作業をするとします。いつも同じようにキータイプするのが面倒だったり、打ち間違いをしないため、バッチファイルを作成します。例えば、上記の場合、スクリーンエディタ等で
CD B:\BACKUP
CD \DATA
COPY A:*.* B: |
という内容のファイルを作成します。拡張子は「.BAT」になります。例えば、「BK.BAT」という名前にします。これをAドライブのルートディレクトリに入れておけば、プロンプトが「A:\>」の状態で「BK(改行)」とキー入力すると、
「CD B:\BACKUP」→「CD \DATA」→「COPY A:*.* B:」
と順番に実行していきます。
バッチファイルの「バッチ」処理とは「一括」処理という意味です。
◆PATH
上記は、「B:\>」や「A:\DATA\>」の状態では実行出来ません。そのドライブ、そのディレクトリには、「BK.BAT」が存在しないからです。この場合、「PATH=A:\」とキー入力すると、「BK」と入力すれば実行出来るようになります。「PATH=A:\」は「プログラムやバッチファイルを動かす時にAドライブのルートディレクトリも探しなさい」という意味です。但し、PCを起動するたびにいつもいつも、「PATH=A:\」と打ち込むのは面倒です。そこで出てくるのが「AUTOEXEC.BAT」です。
◆AUTOEXEC.BAT
「AUTOEXEC.BAT」とは、PC起動時に自動的に実行される特別なバッチファイルです。Aドライブから起動されるPCではAドライブのルートディレクトリに、Cドライブから起動されるPCではCドライブのルートディレクトリに「AUTOEXEC.BAT」を作成しておきます。すると、PCを起動した時に環境ファイル「CONFIG.SYS」を読み込んだ後、自動的に「AUTOEXEC.BAT」が実行されます。
「AUTOEXEC.BAT」の作成の仕方は、普通のバッチファイルと同じです。例えば、
PATH=A:\DOS;A:\UTIL;A:\
PROMPT $P$G |
と作成していれば、PC起動時に
「PATH=A:\DOS;A:\UTIL;A:\」→「PROMPT $P$G」
の順で実行します。
「PATH=A:\DOS;A:\UTIL;A:\」とは、プログラムやバッチファイルを実行する時に、
カレントドライブのルートディレクトリを探す
→「A:\DOS」内を探す
→「A:\UTIL」内を探す
→「A:\」内を探す
上記の中でどこかに指定したものがあれば実行され、無ければ「コマンドまたはファイル名が違います」というメッセージが表示され実行されません。
「PROMPT $P$G」とは、コマンドプロンプトの文字を「カレントドライブとカレントディレクトリと文字">"」にする、という意味です。
バッチファイルの中には、DOSの内部コマンド、DOSの外部コマンド、いろんなプログラム(.COM、.EXE)、他のバッチファイル(但し、ABC.BATを動かしたいという事で「ABC」と指定すると、ABCに行ったまま戻って来なくなります。戻って来させたい場合には、「CALL ABC.BAT」のように指定します)、その他、バッチファイルのコマンドもあります。
◆バッチファイルのパラメータ
DOSプログラムによって、いろんなパラメータやオプションを指定出来るものが多いです。例えば、「DIR C: /P」の「C:」がパラメータで「/P」がオプション、という感じですが、バッチファイルでも同じように、パラメータを扱う事が出来ます(パラメータとオプションは同じ扱いです)。
例えば、「DIR 〜 /P」の「/P」を入力するのが面倒だ、という事で「DP.BAT」を作る場合には、
のように作成すればOKです。なお、パラメータは、「%0」はバッチファイルの名前になり、「%1」〜「%9」が利用出来ます。パラメータを10個以上使いたい場合には「SHIFT」コマンドを使いますが、煩雑になりますので、なるべくシンプルに作るのが無難です。
◆バッチファイルのコマンド
バッチファイルのコマンドには、以下のようなものがあります。
BATKEY | 【書式】BATKEY [0|1|2] [<メッセージ>] |
【機能】指定したメッセージを表示し、その後ユーザーからのキー入力を待ちます。キー入力に対応した数値をERRORLEVEL(エラーレベル)として返します。
【スイッチ】
0:0から9までの数値入力 0〜9を返す
1:Y/N入力 "Y"又は"y"→0、"N"又は"n"→255
2:入力したキーのASCIIコードを返す |
ECHO | 【書式】ECHO [ON|OFF|<メッセージ>] |
【機能】バッチファイルの実行中に、コマンド名を表示するかどうかを設定します。メッセージを表示することもできます。
【例】
ECHO OFF:以降のコマンド行表示をしないようにします。
ECHO *テスト* :「*テスト*」と表示します。 |
FOR |
【書式】
1)FOR %%<C> IN (<項目の並び>) DO <コマンド>[<パラメータ>]
2)FOR %<C> IN (<項目の並び>) DO <コマンド>[<パラメータ>]
1)バッチファイルでの使用 2)コマンドラインでの使用 |
【機能】指定された項目でコマンドを反復処理します。
【例】
FOR %%A IN (A*.* B*.* C*.*) DO DIR %%A
「DIR A*.*」「DIR B*.*」「DIR C*.*」を行います。 |
GOTO | 【書式】GOTO <ラベル> |
【機能】バッチ処理の流れを<ラベル>で定義される位置へ移します。
<ラベル>は、コロン(:)で始まる行で、8文字まで。ピリオド(.)は指定出来ません。※GOTOの後に指定するラベル名には、コロンは指定しません。 |
IF | 【書式】IF [NOT] <条件> <コマンド> |
【機能】指定した条件に応じてバッチ処置を行います。
【例】
IF ERRORLEVEL 1 ECHO *1*
:ERRORLEVELが1以上だったら「*1*」と表示
IF NOT ERRORLEVEL 1 ECHO *2*
:ERRORLEVELが1以上でなければ「*2*」と表示
IF "%1" == "ABC" ECHO *引数はABCです*
:%1つまり第1パラメータが「ABC」ならメッセージ表示
IF EXIST A*.* ECHO *Aから始まるファイルがあります*
:EXISTの後のファイルの名前があればメッセージ表示 |
PAUSE | 【書式】PAUSE [<コメント>] |
【機能】バッチ処理の実行を一時停止し、ユーザーのキー入力を待ちます。コメントを省略したら「準備ができたらどれかキーを押してください」と表示されます。そこでバッチファイルを中断したい時には、[CTRL]+[C]を押します。 |
REM | 【書式】REM [<コメント>] |
【機能】バッチファイル中の注釈行(コメント)を書くときに使用します。また、コメントを画面に表示することもできます。(ECHO ON時にはコメントは表示されます。ECHO OFF時にはコメントは表示されません。) |
SHIFT | 【書式】SHIFT |
【機能】バッチファイルのパラメータ(%0〜%9)を1つずつずらします。
SHIFTを1回実行すると、
%0←バッチファイル名
%1←第1パラメータ
...
%9←第9パラメータ | → |
%0←第1パラメータ
%1←第2パラメータ
...
%9←第10パラメータ |
もう1回SHIFTを実行すると、
%0←第1パラメータ
%1←第2パラメータ
...
%9←第10パラメータ | → |
%0←第2パラメータ
%1←第3パラメータ
...
%9←第11パラメータ |
とずらせますので、SHIFTをうまく使えばパラメータを10個以上扱う事が出来るようになります。 |
(参考:「NEC MS-DOS3.3Dユーザーリファレンスマニュアル」より抜粋)
◆自作コマンドでの返り値
C言語等で自作コマンドや一般的なDOSプログラムを作ってバッチファイルへ値を渡したい場合には、例えばC言語の場合には、通常、
main()
{
〜
} |
void main(int argc,char**argv)
{
〜
} |
というのを、
int main(〜)
{
〜
return(10);
} |
のようにしてreturn文で値を入れておけば、その値が、このプログラムの実行後のERRORLEVELの値として渡ります。上記の例では、「10」が返り値(ERRORLEVELの値)になります。 |