引数の値によって分岐して処理するバッチファイルを作りました!
サクッとバッチで実現したかったので作ったのですが、1ヶ月しないうちに忘れそうなのでまとめてみました(笑)
引数で分岐するバッチファイルのソース
こんな感じでソースを作りました。
引数を1つ指定してバッチファイルを実行します。
それに応じて処理を行ってくれるバッチファイルです。
@echo off if %1==条件1 ( echo 引数が条件1にヒット goto exe ) if %1==条件2 ( echo 引数が条件2にヒット goto exec ) echo 引数が条件にヒットしなかった→終了 goto end : exec echo 引数にヒットしたときの処理 :end echo 終了
解説
それではこのバッチについて解説です。
バッチファイルのif文
if文はこんな感じで使います。
if 条件 ( TRUEのときの処理 ) else ( FALSEのときの処理 )
比較演算子 | 意味合い |
---|---|
EQU | 等しい(==) |
NEQ | 等しくない(!=) |
LSS | より小さい(<) |
LEQ | 以下(<=) |
GTR | より大きい(>) |
GEQ | 以上(>=) |
ただネットで見て、使ってみる限り、「==」でも「EQU」と同じ挙動をしてくれるようです。
ヘルプに書いてないけど、アップデートされたのかな?
「%N」が引数
バッチファイルでの引数は、%と数字の組み合わせで表現します。
構文 | 意味合い |
---|---|
%0 | 実行したバッチファイル名 |
%1 | 1個目の引数 |
%2 | 2個目の引数 |
%N | N個目の引数 |
なので今回使用した「%1」は、1個目の引数を参照します。
引数を2個や3個使いたい場合は、そのまま「%2」や「%3」を使えばOKです。
gotoとラベル
いにしえのC言語などで使われていた(?)、GOTO文をご存知でしょうか?
goto ラベル名
を実行すると
: ラベル
の箇所にジャンプします。
なので
- 一定の処理ブロックを実行したい
- 条件と一致したら、ある処理を行いたくない
- 以降の処理を行わずに終了したい
なんてときに使えます。
ただし他の言語同様、GOTOを乱用すると複雑怪奇なものになったり、可読性が鬼下がりします。
なので乱用は禁物です。
引数での分岐を試す
実行して結果を見てみましょう。
引数がなしのとき
引数がなしのときは、エラーになります。
> test ( の使い方が誤っています。
「条件1」を渡したとき
「条件1」を渡すと、
- if文の中の処理
- 実行したい処理
を行ってくれます。
> test 条件1 引数が条件1にヒット 引数にヒットしたときの処理 終了
「条件2」を渡したとき
「条件2」を渡すと、こちらも条件1のときと同じく
- if文の中の処理
- 実行したい処理
を行ってくれます。
> test 条件2 引数が条件2にヒット 引数にヒットしたときの処理 終了
「条件3」を渡したとき
「条件3」を渡したときは、どの条件にも一致しないので終了します。
> test 条件3 引数が条件にヒットしなかった→終了 終了
あとがき
引数のあたいで処理分岐するバッチファイルについてでした!
Visual Studioでビルド時に、勝手にコピーしてもらったりするために作りましたが、なかなかいい感じです。
とはいえコピーでやるなら、robocopyとか使ったほうが早かったんじゃ……
とか後々思ったのは内緒です(笑)
使えるケースは他にもあると思うので、是非試してみてください!