MS-DOSとの関係、コマンドプロンプトの使用方法やバッチファイル作成方法など、ぜひ覚えて使ってみよう!
★本ページはプロモーションが含まれています★
当ページでは、バッチファイルがどういったものであるのかについて解説。
コマンドについては、
バッチファイルコマンドをご覧ください。
バッチファイル(Batch File)は、Windowsで複数の処理をまとめて実行する際に使われるプログラムファイル。
バッチファイルの中身は、基本的にはコマンドプロンプトで実行できるコマンドを1行ずつ明記したもの。
ファイル名の拡張子は、「.bat」または「.cmd」とする。通常は「.bat」が採用される。
バッチファイルは、条件分岐や変数の記述、他のバッチファイルからの呼び出しができるので
余り複雑な制御はできないが、簡単で単純なプログラムなら誰でもすぐに書けるというメリットがある。
一行に一コマンド
ただし、forやifコマンドを使って一行が複文になっている場合、
またはパイプ「|」でコマンドを連続して記述する場合は別)
大文字小文字の区別
大文字小文字の区別はないが、文字列定数として定義された文字列
そのものは当然ながら大文字小文字の区別がある。
一行あたりの最大文字数
コマンドプロンプトでは一行あたりの最大文字数の制限は無くなった。
(MSDOSでの文字数は最大127バイトである。)
空行
空行があっても、スペースの行があってもバッチファイルの実行に支障は無い。
バッチファイル中で許される記号
複数のコマンドを繋げるパイプの「|」
ファイルの入出力を切り替えるリダイレクト用の「<」「>」「>>」
ワイルドカードでファイル名を表記する「?」「*」はバッチファイル内で使用可能。
バッチファイルの処理を中断させる時は、コマンドプロンプトでのコマンド処理を
中断させる場合と同様、Ctrl+Cキーを押す。
バッチファイルを実行する際、バッチ用のパラメータ(引数、変数)を指定して
バッチファイルを実行させることができる。(バッチパラメータと呼ぶ)
いつも決ったファイル名、ディレクトリ名ではなく、その時その時で処理を切り替えられる。
パラメータを使用するときには、あらかじめバッチファイルのコマンドでパラメータを指定
しておく必要がある。
パラメータであることを指定する記号は「%」をつけて数字「%1」「%2」...とする。
バッチファイルでは、ファイルの先頭から一行ずつ下の行に向かって実行されるのが原則。
しかし、ある条件を設定しておき、その条件が満たされた際に別のコマンドを実行させたり
バッチファイル中のあるひとかたまりの処理ブロックの名前を示す「ラベル」にジャンプし、
処理を続行させる事もできる。
プログラミング言語の基本的な機能である、この制御を担当するのは「if」コマンドである。
例を挙げて説明する。
cp.bat
----------------------------------------------------------
1 @echo off
2 if "%1" == "" goto error
3 if "%2" == "" goto error
4 if "%1" == "%2" goto error
5 echo%1の新しいファイルを%2にコピー
6 xcopy %1 %2 /s /d
7 goto end
8 :error
9 echo 入力エラー
10 :end
----------------------------------------------------------
** 左の数字は解説の為つけたもの
2行目と3行目では「%1」もしくは「%2」がnull(未定義値)の
(入力されていない)場合の処理を決めている。
指定したラベルに処理をジャンプさせるのが「goto」コマンドである。
この場合、パラメータに値が入力されていない場合には、
8行目のラベル「error」に処理をジャンプさせている。
4行目では、「%1」と「%2」が同じ値であった場合に、
8行目のラベル「error」に処理をジャンプさせている。
「%1」と「%2」に異なる文字列が入力されれば、5行目の文字列を
画面上に表示する。「%1」と「%2」に入力されたパスがハードディスクに存在すれば、
6行目が実行される。
7行目では処理を10行目にジャンプさせ、全ての処理が終了する。
そしてコマンドプロンプトは再びコマンドラインからコマンドの入力を受け付けるようになる。
バッチファイルでは、バッチパラメータと呼ばれる変数を利用する事ができ、
それらを利用する事でファイルに対するバッチ処理を比較的簡単に行う事ができる。
通常は変数名の前に識別文字の「%」をつけて表される。
「!」をつけることもあるが、それはNT系のコマンドインタープリタ「cmd.exe」
でサポートしている遅延環境変数を表現する時に採用される。
「%」を使用するやり方はMS-DOSの頃からずっと続く一般的な環境変数の表記方法である。
パラメータ「%1」はバッチファイル実行時に付加された最初のパラメータを表す。
2番目は「%2」、3番目は「%3」で全部で9個のパラメータを渡す事ができる。
特別なものに「%0」があり、これは実行されたバッチファイル名を表す。
これらの変数はいずれも文字列型の変数として取り扱われるが、
下記のような修飾子をつければ簡単な編集が可能。
修飾子 |
機能・用途 |
%~1 |
全ての引用句(")を削除して%1を展開する。 |
%~f1 |
%1を完全修飾パス名に展開する。 |
%~d1 |
%1をドライブ名だけに展開する。 |
%~p1 |
%1をパスだけに展開する。 |
%~n1 |
%1をファイル名だけに展開する。 |
%~x1 |
%1をファイル拡張子だけに展開する。 |
%~s1 |
展開されたパスはMS-DOSの「8.3形式」でも短い名前だけを含む。 |
%~a1 |
%1をファイル属性に展開する。 |
%~t1 |
%1をファイルの日付・時刻に展開する。 |
%~z1 |
%1をファイルのサイズに展開する。 |
%~$PATH:1 |
PATH環境に指定されているディレクトリを検索し、最初に見つかった完全修飾名
に%1を展開する。環境変数名が定義されていない場合、また検索してもファイルが見つからなかった
場合は、この修飾子を指定すると空の文字列に展開する。 |
** いくつかの修飾子を組み合わせる事も可能。
例 : %~dp1 %1をドライブ名とパスだけに展開する
echo |
バッチファイルの中のメッセージの表示、非表示 |
rem |
注釈行を設定する。 |
pause |
バッチファイルの処理を一時停止させる。 |
if else |
条件によって処理を分岐する。 |
goto |
バッチファイルの中の別の処理ブロックにジャンプする。 |
call |
現在のバッチファイルから他のバッチファイルを呼び出し移動させる。 |
for |
コマンドを繰り返して実行させる。 |
shift |
バッチパラメータを繰り上げる。 |
setlocal |
バッチファイルでの環境変数の使用を開始する。 |
endlocal |
バッチファイルでの環境変数の使用を終了する。 |