◆ echo | |
echo
[[on
|
off]
|
[メッセージ]]
echoは、標準出力(画面)にコマンドプロンプトや各種メッセージを表示するかどうか 制御するコマンドである。 通常のコマンドプロンプトでも使用されるが、バッチファイル内で使われる事の方が多い。 パラメータ メッセージ・・画面に表示したい文字列を入力する。 コマンドプロンプトが表示された時点では、echoはonに設定されている。 つまり、初期状態でバッチファイルを実行すると、ファイルの内容や実行されたコマンドの出力結果、 展開処理されたバッチパラメータの内容も全て画面に表示されてしまう。 それで、バッチファイルの先頭でechoをoffに設定しておく。 バッチファイル実行中に画面表示する場合は、echoに続いて文字列をパラメータとして与える。 「echo off」をバッチファイルの先頭に記述しても、実際に表示が制御されるのは2行目以降である。 つまり1行目は初期状態である「echo on」になるので、「echo off」という文字列そのものが表示されてしまう。 そこで、echoコマンドの前に「@」をつけて「@echo off」と記述する。 「@」はそのコマンドを画面に表示せずに実行するためのバッチファイル用制御記号である。 空白行を挿入するには、echoに続いてピリオドをつけた echo. でも構わないし 括弧の]をつけた echo] でも代用できる。
|
◆ rem | |
rem
[コメント]
remは、バッチファイル内にコマンド以外の注釈を書き込みたい時に使用するコマンドである。 remで書かれた文字列は、コマンドプロンプトではコマンドとして解釈、実行されない。 またecho offの状態ではコメントの内容では画面に表示されないので、コマンド説明などを書くとよい。 パラメータ コメント・・注釈としてバッチファイルに書きたい文字列を指定。
|
◆ pause | |
pause
pauseは、バッチファイルの処理を一時停止させるためのコマンドである。 「続行するには何かキーを押してください...」と表示され一旦そこで処理は止まる。 任意のキーを押すと処理は続行される。Ctrl+Cキーを押すと、その時点で処理は中止される。
|
◆ if/else | ||
1 if
[not]
exist
ファイル名
(コマンド1)
[else
コマンド2]
2 if [/i] [not] 文字列1 == 文字列2 (コマンド1) [else コマンド2] 3 if [/i] 文字列1 比較演算子 文字列2 (コマンド1) [else コマンド2] 4 if [not] errorlevel 番号 (コマンド1) [else コマンド2] 5 if cmdextversion 番号 (コマンド1) [else コマンド2] 6 if defined 変数 (コマンド1) [else コマンド2] ifは、バッチファイル内でプログラムの流れを制御する場合に使用するコマンドである。 書式ごとの使い方は下記を参照。 パラメータ ファイル名・・ ファイル名を入力する。 コマンド1・・ ifコマンドで条件が真の場合に実行するコマンドを入力する。 [not]が指定されていない場合は、コマンドにはパラメータを含める事ができる。 else コマンド2・・ ifコマンドで条件が偽の場合に実行するコマンドを入力する。 コマンドにはパラメータを含める事ができる。 errorlevel 番号・・ 直前に実行したコマンドが返す終了コードの番号が指定した番号等しいか大きい場合に 「コマンド1」を実行し、そうでない場合には「コマンド2」を実行する。 文字列1==文字列2・・ 「文字列1」と「文字列2」が等しい場合に、条件は真になる。 exist ファイル名・・ ファイルが存在する場合に、条件は真になる。 文字列1 比較演算子 文字列2・・ 「文字列1」と「文字列2」を比較して、比較演算子によって真偽を判定。 比較演算子は以下の6種類がある。
内部バージョンが「番号」と等しいか大きい場合に、条件は真になる。 defined 変数・・ 環境変数名を受け取り、環境変数が定義されている場合に条件は真になる。 not 指定した判定条件を反転させる。つまり条件が偽のときに、「コマンド1」が実行される。 /i 文字列を比較する場合に、アルファベットの大文字と小文字を区別しない。 ◆◆◆ 書式ごとの使い方 ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ 1. この書式はファイルが存在するかどうかで実行するコマンドを切り替えている。 注意しなくてはならないのは、コマンド1を( )でくくる点である。 2. 文字列同士の比較をして、実行するコマンドを切り替えている。 固定文字列同士の比較もでき、バッチファイル用パラメータの%0~%9、%、*なども利用可能。 3. これは2を発展させてより高度な比較をしたい場合に使用する。比較演算子を使用して真偽を判定する。 4. errorlevelで他のプログラムの終了コードを検査する時に使用。 コマンドプロンプトのほとんどのコマンドは、終了コードとしてコマンドが正常に終了すると「0」を、エラーが 発生すると「1」を返す。直前のコマンドの完了コードを調べる事ができれば、バッチファイルの中で エラーの有無によって制御を切り替える事ができる。 5. コマンドインタープリタ「cmd.exe」での拡張機能バージョンを調査する際に使用する。 始めのバージョンは1で、コマンド拡張機能に何か重要な拡張が追加された場合には値が1大きくなる。 コマンド拡張機能が無効である場合は、cmdextversionの条件は常に偽となる。 6. 環境変数が定義されているかどうかを調査する。 ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
|
◆ goto | |
goto
ラベル名
gotoは、任意の場所に処理内容をジャンプさせるための制御コマンドである。 バッチファイルは、ファイルの先頭から順に実行されるが、gotoコマンドを使用すると 処理の流れを変える事ができる。 パラメータ ラベル名・・行頭にコロン「:」を付けた文字列を指定する。
|
◆ call | |||||||||||||||||||||||||
call
[ドライブ名:]
[パス名]
ファイル名
[バッチパラメータ]
callは、他のバッチファイルを呼び出すコマンドである。 バッチファイルの中から他のバッチファイルを呼び出す場合、バッチファイルに他のバッチファイル 名を記述しただけでは、呼び出された側のバッチファイルが終了するとそこ動作が終了してしまい、 元のバッチファイルに戻ってくる事ができない。 そこで、callの後に1バイトスペースを入力し、続いて他のバッチファイル名を記述する。 すると、呼び出された側のバッチファイルの処理が終わると、元の呼び出した側のバッチファイル へ制御を戻す事ができる。 パラメータ ドライブ名・・呼び出すバッチファイルのドライブ名を指定。 パス名・・呼びだすバッチファイルのパス名を指定。 ファイル名・・呼びだすバッチファイルのファイル名を指定。 バッチパラメータが利用できる
** callコマンドではパイプとリダイレクトが使えない点は注意である。
|
◆ for | ||||||||||||||||
■ バッチファイル内 ■
for %%変数名 in (セット) do コマンド名 [コマンドパラメータ] ■ コマンドラインで ■ for %変数名 in (セット) do コマンド名 [コマンドパラメータ] forは、バッチファイルやコマンドラインで複数のファイルに対し、繰り返し同じ コマンドを実行したい場合に利用するコマンドである。 パラメータ %%変数名 単一文字の置き換えができるパラメータを指定する。 「a」から「z」または「A」から「Z」までの任意の1文字が利用できる。 大文字と小文字は区別される(大文字推奨)。 コマンドラインで使用する場合は「%変数」とするがバッチファイル内では「%%変数」とする。 (セット) 複数のファイル、ディレクトリ、文字列、値などのファイルセットを指定。 ワイルドカードも使用可能。 コマンド名 各ファイルごとに実行するコマンドを指定。 コマンドパラメータ 指定されたコマンドのパラメータやスイッチを指定。 パラメータを「%%変数名」で指定した変数とすると、(セット)で指定 した要素を1つずつコマンドにパラメータとして渡す。 in~do パラメータとは言えないが、forコマンドの書式として必須。 /d セットにワイルドカードが使われている場合、ディレクトリ名のみにマッチさせる。 /r [ドライブ名:[パス名]] カレントディレクトリもしくは[ドライブ名]:[パス名]で指定したディレクトリ以下の 階層に対してもforコマンドを実行する。(再帰的処理) /l 反復しての繰り返し方法を指定。 /f [解析文字列] セットにマッチしたファイルの各行を対象に、解析文字列によって指定された方法で トークンを切り出してコマンドを実行。 繰り返しの対象は「セット」で指定し、この「セット」のないように応じて変化する「%変数名」を渡すことで繰り返し処理を行う。 「%変数名」は、バッチファイル中ではパラメータ変数の「%1~%9」と区別するために「%%1~%%9」 と%を一個余分に記述する。(バッチファイル内)コマンドラインでは「%1~%9」でよい。
■オプションスイッチによる書式の変化 forコマンドは4つのオプションを指定する際には、forコマンドの書式(構文)が微妙に変化する。
/fパラメータの解析文字列でUSEBACKQオプションを指定する場合、以下の2つの書式が増える。
|
◆ shift | |
shift
[/シフト開始番号]
shiftは、バッチファイル中の置き換え可能なパラメータの位置を、 1つずつ変更する制御コマンドである。 バッチファイルのパラメータには「%0」~「%9」の10個があるが、「%0」は バッチファイル名が格納されているので、使用できるパラメータは9個という事になるので、 10個以上のパラメータを処理したいときは、shiftコマンドを使用する。 /シフト開始番号 コマンドの拡張機能が有効である時に指定できる0~8の整数。 パラメータのシフトが起こる番号を指定。 例えば「/3」とすると、「%3」以降のパラメータがシフトされるが、「%0~2」はシフトされない。
|
◆ setlocal,endlocal | |
setlocal
[オプション]
・・・・・・・・・ endlocal setlocalは、バッチファイルの中で設定・変更された環境変数を、そのバッチファイル の実行中だけ有効にしてくれるコマンドで、endlocalはsetlocalコマンド以降に変更された環境変数 をリセットしてくれるコマンドである。 バッチファイルの中では、一時的に環境変数を変更する場合がよくある。 ただしそのままではコマンドプロンプトウィンドウで使用される環境変数も変更されたままなので、 他のバッチファイルやコマンドラインからの動作に不具合が起きる場合がある。 そこで使用するのがsetlocalとendlocalコマンドである。 これらはペアで使う必要がある。 パラメータ enableextensions・・ 対応するendlocalコマンドが実行されるまで、コマンド拡張機能を有効に。 disableextensions・・ 対応するendlocalコマンドが実行されるまで、コマンド拡張機能を無効に。 enabledelayedexpansion・・ 対応するendlocalコマンドが実行されるまで、遅延環境変数の展開を有効に。 disabledelayedexpansion・・ 対応するendlocalコマンドが実行されるまで、遅延環境変数の展開を無効に。
|