[コマンドプロンプト活用] バッチファイルを作成してみる

バッチファイルとは?

バッチファイル(Batch File)とは、MS-DOS、OS/2、Windowsでのコマンドプロンプト(シェル)に行わせたい命令列をテキストファイルに記述したもの。バッチファイルを実行すると、シェルプログラム(一般に COMMAND.COMやcmd.exe)がそのファイルを読み、その中のコマンドを(通常)一行ずつ実行する。バッチファイルはUNIX系オペレーティングシステムのシェルスクリプトに相当する。
Wikipedia より引用

なんて、書かれてもパッとしないんで、とりあえずは 一連の作業を一括で行わせるためのファイル とでも書いておきます。

例えば、以下のようなケースで使われる事が多いかと思います。
FFmpeglameのような、コマンドで実行するタイプのアプリケーションを使用する場合、
  毎回コマンドで処理を行うのは面倒だからバッチファイルを作成して簡単に出力を行えるようにしたい。

・ データを移行する為、ローカルネットワーク内のマシンのC、D、E等のドライブに直繋ぎするのだけど、
  一回の作業で全部移行する気はなく、何度も接続をかけないといけない。
  何度も接続するのは面倒だからドライブを指定するだけで開けるようにしたい

結論を言えば、面倒な一連の作業を1つファイルを叩くだけにし、利用者が楽できるようにするためのファイルです。


とりあえず、作ってみる

試しに、コマンドプロンプトのコマンドのヘルプの内容をhelp.txtとして出力するbatファイルを作成してみましょう。

help_exp.bat
@echo off
CD "%~dp0"
SET /p CMD="ヘルプを表示するコマンドを指定> "

IF %CMD% == quit GOTO eof

help %CMD% > help.txt
START help.txt

CALL %~nx0

行ごとに説明していきます。

1行目
@echo off
	標準出力を表示しないように指定しています。
	行頭の@がない場合、echo offが出力されますが、@を行頭に付ける事でその行を非表示にできます。
	通常、標準出力は必要ないので、バッチファイルの先頭には @echo off を記述します。

2行目
CD "%~dp0"
	バッチファイルを実行したディレクトリに移動します。
	%~dp0 なんて謎の文字列が並んでいますが、一旦ここでは"おまじない"ということで。後で説明します。

3行目
SET /p CMD="ヘルプを表示するコマンドを指定> "
	SETコマンドは、関数に値をセットするためのコマンドです。
	/pオプションをつけることで、ユーザーに値を入力させる事ができます。
	CMDが今回変数名で、"(ダブルクオート)で囲った文字列は、ユーザーに対して表示する文字列になります。
	/pオプションをつけない場合、=(イコール)の後に、変数に格納したい文字列を記述します。

	なお、設定したCMD変数の値を使う時は、%(パーセント)記号で %CMD% のようにかこむ必要があります。

5行目
IF %CMD% == quit GOTO eof
	IFは「もし」という意味合いを持つ英語で、意味もその通りです。
	この行は、書いてる通りに素直に捉えてみてください。

		「もし、"CMD"変数にセットされた値が"quit"ならば eof へ行け」

	今回、終了させる意味合いだけでGOTOコマンドを書いているだけなので飛ぶ先は作っていません。
	GOTOコマンドの飛ぶ先を指定する場合は

	:eof

	のように書く事で、位置先を指定する事ができます。

7行目
help %CMD% > help.txt
	この行が、メインのコマンド処理を行っている行になります。
	ユーザーが入力したコマンドのhelp(ヘルプ)をhelp.txtに出力する処理を行っています。
	途中に書かれている、>(大なり)は標準出力をファイルにリダイレクトするという意味を持ちます。
	また、>>(2重大なり)の場合は標準出力をファイルの末尾に追加するという意味合いを持ちます。

8行目
START help.txt
	この行は、なんとなく直感で分るのではないでしょうか?
	help.txtを始める(開く)という意味合いです。
	指定されたファイルを開くための既定のプログラムで実行されます。

10行目
CALL %~nx0
	CALLコマンドは、別のバッチファイルを呼び出すためのコマンドです。
	今回は、再帰的に実行させたいので、自分自身を呼び出しています。

	ただ、自分自身を呼び出していると書きましたが、2行目でも出てきた"おまじない"がまた出てきていますね。
	その"おまじない"はこの辺りで明かしておきます。

	まず、%0には自分自身(今回の場合help.bat)のフルパスが格納されています。
	そのパスは、ちょっと手を加えるだけで、一部分のみを展開することが可能になっています。
	今回の使用例から察しのついている方も居ると思いますが、%と0の間に修飾子をつけることで可能です。

	%0  	: 引用符付きのフルパスが格納されています。
	%~0 	: 全ての引用句(")を削除して%0を展開する。
	%~f0	: %0を完全修飾パス名に展開する。
	%~d0	: %0をドライブ名だけに展開する。
	%~p0	: %0をパスだけに展開する。
	%~n0	: %0をファイル名だけに展開する。
	%~x0	: %0をファイル拡張子だけに展開する。
	%~s0	: 展開されたパスはMS-DOSの「8.3形式」でも短い名前だけを含む。
	%~a0	: %0をファイル属性に展開する。
	%~t0	: %0をファイルの日付・時刻に展開する。
	%~z0	: %0をファイルのサイズに展開する。
	%~$PATH:0	: 
		PATH環境に指定されているディレクトリを検索し、最初に見つかった完全修飾名に%0を展開する。
		環境変数名が定義されていない場合、また検索してもファイルが見つからなかった場合は、
		この修飾子を指定すると空の文字列に展開する。

	複数の修飾子を組み合わせる事も可能なのもサンプルで分っていただけるかと思いますが、補足しておきます。
	2 行目の %~dp0 の場合は、%0のドライブ名とパスが展開されます。
	10行目の %~nx0 の場合は、%0のファイル名と拡張子が展開されます。

今回「バッチファイルとは何ぞや!」から入ったので、結構丁寧に書きました(丁寧に書いたつもり)が、今後はもうこんなに丁寧に解説は入れないのでその点はご了承ください。
コメントで簡易に説明入れる程度になると思います。詳しく知りたい所はマニュアルを参照してください。

ただ、最後にもう一度だけ言わせてください。

バッチファイルを作れると、煩わしい作業を簡単に簡略化できます!

Windowsその物を煩わしく思っている私が言うのもどうかと思いますが



バッチファイル」に関する「」の商品を自動的に表示しています。
キーワードに関連していない商品は、Amazonがオススメする商品です。気になる物があればどうぞ。

作成日:2008年07月07日(月)