arrow 若葉プログラミング塾 > 知識の玉手箱 > ワンポイントTips >

バッチファイル

バッチファイルとはなにか

 バッチファイル(batch file)という用語はDOSの世界独自の用語である。Unix/Linuxではシェル(sh、csh、bash、tcshなど)が使えて、インストーラやよく使う決まった手順をテキストファイルに書いておけば、 そのファイル名で呼び出せる。それにかわるものとして、機能的にはだいぶ落ちるのだが、DOSの世界にはバッチファイルというものが存在する。

 仕様がコンパクトなためか、あるいは使う人が少ないのか、バッチファイルについての本はきわめて少ない。 WindowsではインストーラをGUIを駆使した超簡単なものにする習慣ができてしまい、パッケージ製品などではバッチファイルをほとんど使わなくなってしまったためもあるだろう。しかし、バッチファイルは個人的に使ってこそ光る。

 一言で言えば、バッチファイルとはDOSのコマンドを羅列したファイルである。

@echo off
cd \bcc\src
bcc32 sample.c
sample

普段DOSプロンプトで一連のコマンドを連続して打ち込むことが多い場合、上記のようにmybatch.batに書いておき、

C:\>mybatch

とだけ打てば、中身を順次実行してくれる。ただし、カレントディレクトリにない場合、パスが通っている必要がある(環境変数の設定方法参照)。

バッチファイルの実際

 バッチファイルには、コマンドやプログラム名以外にもいくつかの文法が書ける。簡易スクリプト言語といってよいだろう。

 if文

 以下の3パターンがある。

if errorlevel <値> <コマンド>    --直前のコマンドの終了コードを判定
if exist <ファイル名> <コマンド>   --ファイルの有無を判定
if <文字列1>==<文字列2> <コマンド> --文字列の一致を判定

それぞれの判定文を否定するにはnotをつける。

if not errorlevel <値> <コマンド>
if not exist <ファイル名> <コマンド>
if not <文字列1>==<文字列2> <コマンド>
sample
if errorlevel = 2 echo 失敗しました

if exist c:\bcc\src\sample.c echo ファイルが存在します

if %1=="no" exit 

 call文

 バッチファイルから別のバッチファイルを呼び出すときに使用する。直接呼び出すと制御が戻ってこない。また、バッチファイル内のラベルに制御を飛ばすときにも使用する。

call subbatch1

 for文

for文といえば繰り返し。

for %%A in (*.tmp *.bak) do delete %%A

上記の例はカレントディレクトリの拡張子tmpまたはbakなファイルをすべて削除する。%%A、%%B…などは変数。この場合、該当するファイル名が順次入る。

 goto文

goto :LABEL
  :
 :
:LABEL

コロンのうしろにラベルを書く。if文と組み合わせるのが常道。

sample
if errorlevel 2 goto :LABEL
echo 成功しました
exit
:LABEL
echo 失敗しました

 rem文

rem これは実行されません

要するにコメント文。長いバッチファイルには必須だ。

 パラメタ

 バッチファイル起動時にパラメタを渡すことができる。

C:\>mybatch sample2

このときのパラメタsample2は、バッチファイルの中では%1で表せる。

@echo off
cd \bcc\src
bcc32 %1.c
%1

パラメタは9個まで指定できる。それ以上必要な場合はSHIFTを使えば番号をずらすことができる。

@echo off
cd \bcc\images
copy %1.gif %2.gif
shift
copy %1.gif %2.gif

Unixな人へ:シェルでは$1なので混同しないように。

 環境変数の引用

%変数名%で呼び出せる。

echo クラスパスは%CLASS_PATH%です。

set LIB_DIR=C:\bcc\lib
cd %LIB_DIR%

バッチファイルの語源

 batchとはメインフレームでの「一括処理」のこと。「バッチジョブを夜間に流す」などという。要するに即時処理ではなく大量のデータをトランザクション処理することである。一例としてあげると、誰かが預金をしたとき、口座にデータが追加されるのが即時処理、月末にすべての銀行口座から利息を計算するのが一括処理である。

 バッチという言葉をここから借りてきて、DOSで使用しているわけである。

バッチファイル
arrow 若葉プログラミング塾 > 知識の玉手箱 > ワンポイントTips >
KC