コマンド別解説

if(条件分岐)

>>ifのオプション簡易解説へ

目次

 

文字列を比較する

等しいときに処理を実行する

二つの文字列を比較して、その文字列同士が等しければ処理を実行するプログラムは以下のように書けます。

 

例えば、変数「test1」と変数「test2」を比較して等しければ、変数の中身を表示するプログラムは以下のように書けます(if_sample_1.bat)。変数についての解説は、「バッチファイルで変数を使用する -やりたいことから検索-」をご覧ください。

6行目から8行目がif文となっています。6行目で二つの変数の中身を比較し、等しい場合にだけ8行目の「echo 「test1」と…」コマンドを実行します。

以下は実行結果です。

if(条件処理) if_sample_1.batの実行結果

 

等しくないときの処理を追加する

もし、等しくなかった場合の処理も追加したい場合には、「else」文を書き加えます。「if」文に書き加える形で使用します。

 

以下のバッチファイル(if_sample_2.bat)は前節の「if_sample_1.bat」に「else」文を追記しました。

8行目に「else」文を追記しました。これで、変数「test1」と変数「test2」が等しくない場合は、9行目~10行目のコマンドが実行されます。

以下は実行結果です。いま二つの変数の中身は異なるので、else文の( )内が表示されていることが分かります。

if(条件処理) if_sample_2.batの実行結果

 

文字列の大文字と小文字を区別しない

文字列としてアルファベットを扱う場合、大文字と小文字の区別をしたくない場合もあるかと思います。小文字と大文字は同じ文字として判断して欲しいとき、「/i」オプションをつけて以下のように記述します(if_sample_3.bat)。

6行目の「if」文で「/i」オプションを指定しました。

 

以下は実行結果です。いま、二つの変数は「apple」と「APPLE」で大文字と小文字の違いがありますが、実行結果から同じ文字として扱われたことが分かります。

if(条件処理) if_sample_3.batの実行結果

 

等しくないときに処理を実行する

比較している文字列が等しくないときに処理を実行する場合には、「if」の代わりに「if not」を使用します

 

もちろん、「if not」文にも「if」文と同様に「else」文が使用可能です。

 

 

数値を比較する

等しいときに処理を実行する

文字列でなく、数値を比較したい場合には「equ」を使います

 

以下は変数「value1」と変数「value2」を数値として比較し、等しければその値を表示するバッチファイルです(if_sample_4.bat)。

 

以下は実行結果です。

if(条件処理) if_sample_4.batの実行結果

 

また、文字列の比較と同様に「if else」文も使用できます

二つの変数(「value1」と「value2」)は異なる値を設定しています。

以下は実行結果です。

if(条件処理) if_sample_5.batの実行結果

 

様々な比較演算子

文字列の場合と異なり、数値には等しいかどうか以外にも大小関係を比較する場合があります。そのためバッチでは以下のような演算子が用意されています。

equ  等しい
neq   等しくない
geq   等しいか、より大きい(以上)
leq   等しいか、より小さい(以下)
gtr  より大きい 
lss より小さい(未満)

 

以下のプログラムは変数「value1」と「value2」を比較する前節のバッチファイル(if_sample_4.bat)を編集し、「より大きい」ときと、「より小さい」ときに実行する処理を追加しました(if_sample_6.bat)。

 

以下、実行結果です。

if(条件処理) if_sample_6.batの実行結果

ここでは、「else if」文を追加することにより、三つの処理に分岐させています。

「else if」を使用すればいくらでも条件分岐を増やすことができます

 

if文を使用したプログラム例は、「入門講義【第7回】 ユーザが処理を選べるようにする」で具体的な使用例を紹介しています。

 

その他の特殊なif文

ファイルの存在有無で判断する

if文には、ファイルが存在するときにだけ処理を実行する特別な書き方が存在します。

例として、以下は「file.txt」ファイルが存在する場合に、そのファイルを削除するプログラムです。

 

単に、

とだけ書いても、ファイルがない場合は「ファイルが見つかりません」という警告が出るだけで特に動作に問題は無いのですが(下図)、警告が出るのを嫌う場合によく書かれる定型的な書き方となっています。

if(条件処理) delコマンドでファイルが存在しない場合の警告

 

直前のコマンドの成否で判断する

直前の処理が成功したか失敗したかを判断するには変数「errorlevel」を使用します

変数「errorlevel」は、実行したコマンドが正常に終了したか、エラーで終了したかの情報が入る変数です。直前で実行したコマンドが正常終了した場合は0が入り、エラー終了した場合は1以上の数値が格納されます。この「errorlevel」に入っている数値のことを「終了コード」と呼びます。

すなわち、コマンドが正常に終了したか否かはこの「終了コード」を参照すれば確認できるということになります。

 

変数「errorlevel」の値によって実行する処理を決めるif文が特別に存在します。「errorlevel」の値が指定した終了コードだった場合に処理を実行するプログラムの構文は以下のようになります。

終了コードに等しいときではなく、ここで、「errorlevel」が終了コード以上のときにコマンドが実行されることに注意してください。

 

また、この構文に関しても「if not」が使用可能です。以下は、errorlevelが指定した終了コード以外のときに処理を実行する場合です。

この場合も「errorlevel」が終了コード未満のときにコマンドが実行されることに注意です。

 

「if errorlevel」文をもっとも使う場面は、「直前のコマンドがエラー終了したときに処理を終了する」場合でしょう。以下プログラムは直前のコマンド「dir」を間違えて「div」と書いてしまったときエラー終了させた例です。

コマンドエラーは「1」以上の数値が「errorlevel」に格納されるので、「if errorlevel 1」としています。エラーの種類によって「errorlevel」に格納される数値は変わってきますが、どにかく「1」以上の数値は何かしらのエラーが生じたことを示しています。

 

以下、実行結果です。

if(条件処理) if_sample_7.batの実行結果

if文に引っかかりエラー終了していることが分かります(最後の行にかかれている「続きのコード」が表示されていません)。ここでは、( )を使って複数行のコマンドをひとまとめにしていることにも注目して下さい。

 

「errorlevel」コマンドに関しては、「errorlevelの値から分岐処理を行う -やりたいことから検索-」や「errorlevel(終了コードを取得する) -コマンド別解説-」を参照してください。

 

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す