バッチファイル(.bat)

 

バッチファイルは 拡張子が .bat のファイルで、コンソールから入力していたコマンドを、入力するのと同じ形の記述を、いくつでも、それにまとめて記述しておいて、そのバッチファイルを実行することによって、まとめてコマンドを行う。そういう形式をとるものです。(自分で なんとか.bat ファイルを作って記述するのです。)

 

                 .bat ファイルを記述したら、実行します。
                実行するには、実行ファイルのときと同様、

なんとか.bat [リターン]    (.bat を省略可能)

です。尚、実行パス、はバッチファイルに対しても有効なので、このことを利用すると、MS-DOS コマンドを、自分専用に、言ってみれば「拡張」することができます。

 

 なんのためにあるのか、はいくつかに整理できます。目的は必ずしも1つだけには限らないわけですね。@一つ一つ入力してやるのが面倒なコマンドをいっぺんにやらせる、@’まとまりのため(単に、自分や他人の整理のため)に記述しておいて、いっぺんにやらせる、A自分専用のコマンド(自分用の拡張コマンドのようなもの)を作る。です。

Aなどはなんだかマニアックであることは確かですが、特定のディレクトりんに移動する cd コマンドなどは、さっさと作っておけばよかった、と思うことはきっとあります。( 下記 home.bat や、cdborland.bat )

 


簡単な例
 ( \と\ は一緒です( 呼称 : エスケープ記号 など)。 / は違います )

 

[ezcopy.bat]
ezcopy[リターン]で実行


copy xxx .
copy yyy .
copy zzz .
......

ファイルのコピー(バックアップ等)をまとめていっぺんにやらせるバッチファイル。
[一つ一つ copy ... とやっていると必ずこうしたくなります。]

 

( 以下2つは、わたくしの場合は C:\Batches ディレクトリを作りそこに置きました。そしてそこを実行パスとして有効にし(そこにパスを通し)ました。( autoexec.bat について調べてみてください ))

 

[cdborland.bat] 
cdborland[リターン] で実行

cd C:\borland\bcc55\include

include ディレクトリに移動して、インクルードファイル(ヘッダファイル)を調べることが多いので作っておきました。

 

[home.bat]
home[リターン]で実行

cd C:\MyDeveloppingArea

home はタイプしやすく、意味も分かりやすい。

 

とくにはまりやすい人にとっては、こんなもの「さっさと作っておけばよかったな」 ということがあると思います。参考にしてください。

 


 

コマンドラインからの入力は一度に一行で行うことが基本でした。

 

ところが、同じようなコマンドを繰り返し行いたい場合や、複数の動作を、まとまりをもたせて一回でかたずけるほうが作業として整理のつく場合があります。開発者としては、もちろんそのコンソールを利用しながら、すぐにでも改良できる立場にあるので、そういう局面があると、ふつうのことのように、「なにかテキストに一行のコマンドを複数記述しておいて、自動的にやらせるような仕組みにしてしまおう」と考えると思うのです。そして、このことがバッチファイル(一般的にはシェルスクリプト)の基本的な考え方なのです。


さきのコマンドラインからの入力も、分解すれば一文字一文字のの文字の連続で、最後に入力する [リターン] も文字コード 0x0A の文字として扱います。なにを言いたいのかというと、MS-DOS ウィンドウ(コンソール)を作るなら、その一文字一文字を解析して扱う「プログラム」を書く、作らなくてはならないということです。それがシェルで、システムの勉強をしていれば一分野を構成するし、システムを構成する大きな部品の一つです。そんな細かいことに思いをはせなくていいとしても、とりあえずそれがまずシェルで、そのシェル(プログラム)を少しだけ改良すると、コマンドを連続して実行できるようになります。(バッチファイルの考え方)。さらに、シェルは、最終的に簡単な構文や変数も扱えるようになります(バッチファイルは進化します。よくばり)。進化の過程みたいに書いているけれども、これらに関しては思いつくことも、思いついてからプログラムを書くのもさして時間のかからない、短時間のことです。できそうだからさっさとやってしまうのです。

シェルはインタープリタですが、一度インタープリタの原型が出来上がると、構文解釈の部分を付け加えるて改良するのはたやすいので、それを付け加えながら コンソール(あるいはシェル)の使い勝手がよくなっていくというのは(少なくとも最初は)、開発していてとても楽しいことだと思うのです。

 

コンパイラとインタープリタはしばしば並べて説明されます。「C ソースコード vs コンパイラ」 と対比して、上に述べたことを 「シェルスクリプト vs インタープリタ(シェル、構文を解釈する部分)」 というふうに眺めれば、記述された「スクリプト、テキストファイル」を解釈、解析するプログラム、という点では全く同じことなので、いい対応になっていると思います。

シェルそのものは、スクリプトの構文解釈のほかに、最も基本の機能であったコマンド入力の構文解釈(「構文解釈」というこの硬い言葉は、パソコン上で、とにかくなにかの「入力」を実行に移したいなら、なんの「システム」もないという、コンピュータを前に何もない草っぱらが広がったような状況下では、プログラマも、そしてモジュールも構文を解析、解釈しなくてはいけないのだ、まずはそういうプログラムから作らなくてはなにも始まらないのだ、と考えれば、とても具体的になります)も行うので、その点を入れてしまうコマンドインタープリタになり、コンパイラとのきれいな対応関係は崩れてしまいますが、以上、シェルという言葉の参考にしてください。

 

シェルはシェル。シェルは、インタープリタ。コンソールは、シェルが管轄する。コンソールは、シェルと直結している。バッチファイルは、シェルスクリプト。バッチファイルは、シェルが処理する。MS-DOS はコンソール。コンソールには、コマンドを入力する。バッチファイルには、コマンドを記述する...。

 

というわけで、バッチファイル(シェルスクリプト) は、コマンドをまとめて記述したり、繰り返しの動作を構文を使って記述したものを、シェルが解釈、実行をとりおこなってくれるものです。更に、シェル命令の自分用の拡張にも応用できます。

 


 

※ バッチファイルと make.exe [お腹が痛いので詳細は略]

 

 make(.exe) はコンパイラのユーティリティです。どちらも使う方にとっては似たようなものですが、コンパイルするならやはり細かいことをしてくれる make に分があります。makefile を作るのが面倒な場合にはてっとりばやくバッチファイルで済ませてしまうことがあります。( make.exe の説明はしません。)


例 : ファイル名 [temp.bat]
Example : FILENAME [temp.bat]
(「EzFax」 の部分を変えればこのままコピー&ペーストで利用可能:いってみれば雛形になります)


[temp.bat] の内容 [ 保存して temp [リターン] で実行です!]
SET APP=EzFax
bcc32 -tW -tWM %APP%
brc32 -iC:\borland\bcc55\include %APP%.rc %APP%.exe


    ・ 上記は、ソースコードファイルのコンパイルをして、更に (リソーススクリプトファイルのコンパイル + リンク) を行います。
    ・ リソーススクリプトが分からなければ、「リソーススクリプト」 ( .rc ファイル) を調べればわかります。
    ・ 慣れない人のために、これは「パスが通っているディレクトリ」に置くにはあまり適(てき)しません。

 

※注意 : ルートディレクトリにある autoexec.bat は システムファイルなので、「むやみな」変更はしてはいけないことです。また、以上の説明では autoexec.bat がシステムの設定が記述されている重要なファイルであることが見えてきませんが、autoexec.bat には OS 起動時に必要な MS-DOS コマンドがまとめて記述されていて、OS が 起動時に自動的にそれらを実行するために autoexec.bat がある、と考えればよいのです。

 

戻る

 

※ 以上の内容に関して参考文献はありません。わたくしの言葉で書きました。(2004/12)