こんなことを知りたい人へ向けて書いています
- Windowsバッチファイルで文字列を比較する方法を知りたい人
- 「if」コマンドの色々な機能について詳しく知りたい人
目次
- バッチファイルで文字列を比較する
- 二つの文字列が等しくないときに「真」とする
- 大文字と小文字を区別しない
- 空白(スペース)を含む文字列を比較する場合
- 文字列ではなく数値を比較するときは使用する比較演算子に注意
その他の関連しそうな記事
バッチファイルで文字列を比較する
バッチファイルで文字列を比較するには、比較演算子の「==」を使用します。使用方法は「if」コマンドを用いて、
1 |
if [文字列1] == [文字列2] [コマンド] |
のようになります。例えば、変数「s1」と「s2」の中の文字列を比較するバッチファイル(compare_strings_yahoo.bat)は以下のように書けます。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo set s2=yahoo rem if文で二つの文字列を比較 if %s1%==%s2% ( echo 二つの変数には同じ文字列が入っています。 ) else ( echo 二つの変数には異なる文字列が入っています。 ) |
このバッチファイルを実行すると以下の図のようになります。
今の場合、変数「s1」と「s2」に入っている文字列は同じですので、if文の条件判定が「真」のときに実行される「echo 二つの変数には同じ文字列が入っています。」によってコマンドプロンプト画面にメッセージが表示されました。
次に、上記のバッチファイルの「s2」を文字列「google」に変えて実行してみましょう(compare_strings_google.bat)。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo set s2=google rem if文で二つの文字列を比較 if %s1%==%s2% ( echo 二つの変数には同じ文字列が入っています。 ) else ( echo 二つの変数には異なる文字列が入っています。 ) |
すると、実行結果は以下のように変わります。
今度は、if文の条件判定が「偽」のときの実行結果となりました。期待通りの動作ですね。
二つの文字列が等しくないときに「真」とする
次は逆に、二つの文字列が等しくないときに、if文の条件判定が「真」になるようにします。それには「if」の後に、「not」をつけるだけです。バッチファイル「compare_strings_google.bat」を以下のように書き直しましょう。バッチファイル名は「compare_strings_google_not.bat」とします。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo set s2=google rem if文で二つの文字列を比較 if not %s1%==%s2% ( echo 二つの変数には同じ文字列が入っていません。 ) else ( echo 二つの変数には異なる文字列が入っていません。 ) |
8行目の「if」の後に、「not」を追加し、「echo」コマンドの出力メッセージ文を少し書き換えただけです。以下、このバッチファイルの実行結果です。
今度は変数「s1」と「s2」の文字列が異なるときに、条件判定は「真」となり「二つの変数には同じ文字列が入っていません。」と出力されています。
大文字と小文字を区別しない
通常、「==」で条件判定した場合、大文字と小文字を区別します。例として、以下のバッチファイル(compare_strings_yahoo_capital.bat)を実行してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo set s2=YAHOO rem if文で二つの文字列を比較 if %s1%==%s2% ( echo 二つの変数には同じ文字列が入っています。 ) else ( echo 二つの変数には異なる文字列が入っています。 ) |
変数「s1」は小文字の「yahoo」に対して、変数「s2」には大文字の「YAHOO」を代入しています。これを実行すると、以下のようになります。
「yahoo」と「YAHOO」は異なる文字列と判断されました。
つぎに、「if」文にオプション「/i」を付けて実行します(compare_strings_yahoo_capital_i.bat)。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo set s2=YAHOO rem if文で二つの文字列を比較 if /i %s1%==%s2% ( echo 二つの変数には同じ文字列が入っています。 ) else ( echo 二つの変数には異なる文字列が入っています。 ) |
以下は実行結果です。
今度は文字列「yahoo」と「YAHOO」は同じ文字列と判定されました。このようにオプション「/i」は大文字と小文字を区別たくない場合に使用します。
空白(スペース)を含む文字列を比較する場合
空白(スペース)を含む文字列を比較する場合には注意が必要です。例として、以下のバッチファイルを作成しました(compare_strings_space_error.bat)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo mail set s2=google mail echo s1=%s1% echo s2=%s2% rem if文で二つの文字列を比較 if %s1%==%s2% ( echo 二つの変数には同じ文字列が入っています。 ) else ( echo 二つの変数には異なる文字列が入っています。 ) |
4,5行目では、「set」コマンドにより、変数「s1」と「s2」には「yahoo mail」と「google mail」というように空白を含む文字列を代入しています。6,7行目では変数「s1」と「s2」の中身をコマンドプロンプト画面に出力して確認を行います。
if文の部分は今までと同様です。これを実行すると、以下のようになります。
10行目のif文で「mail==google の使い方が誤っています。」というエラーが発生してしまいました。これは、「s1」や「s2」に空白が含まれている文字列「yahoo mail」及び「google mail」が入っているため、10行目が、
if yahoo mail==google mail (
として、実行されようとしたためです。これだとif文の文法的に正しくありません。
これを回避するためには、if文の比較する文字列、ここでは「%s1%」と「%2%」をダブルクォーテーション「”」で囲います。以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem 変数「s1」と「s2」を設定 set s1=yahoo mail set s2=google mail echo s1=%s1% echo s2=%s2% rem if文で二つの文字列を比較 if "%s1%"=="%s2%" ( echo 二つの変数には同じ文字列が入っています。 ) else ( echo 二つの変数には異なる文字列が入っています。 ) |
10行目でのif文の変数に「%」をつけて修正しました。実行結果は以下の通りです。
今度はエラーなく正常に実行されました。
文字列ではなく数値を比較するときは使用する比較演算子に注意
ここでは、「if」コマンドを使い文字列に比較について詳しく見てきました。
Windowsバッチファイルでは文字列のほかに数値も扱うことできます。その数値についても「if」コマンドを使った比較が可能なのですが、その場合は比較演算子に注意が必要です。
文字列の場合は比較演算子に「==」を使用しました。しかし、数値は「等しい(==)」こと以外にも「片方がもう片方より大きい」や「片方がもう片方より小さい」ことなども条件判断しなければいけません。
数値の比較については「バッチファイルで数値を比較する -やりたいことから検索-」で詳しく解説していますので、そちらを参考にしてください。
実行結果あってますか?
コメントありがとうございます。
どの実行結果か教えていただけますでしょうか?
二つの文字列を比較②です