lisz-works

技術と興味の集合体

バッチファイル 引数の値で処理分岐

【スポンサーリンク】

コマンドプロンプト

引数の値によって分岐して処理するバッチファイルを作りました!

サクッとバッチで実現したかったので作ったのですが、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」を渡すと、

  1. if文の中の処理
  2. 実行したい処理

を行ってくれます。

> test 条件1
引数が条件1にヒット
引数にヒットしたときの処理
終了

「条件2」を渡したとき

「条件2」を渡すと、こちらも条件1のときと同じく

  1. if文の中の処理
  2. 実行したい処理

を行ってくれます。

> test 条件2
引数が条件2にヒット
引数にヒットしたときの処理
終了

「条件3」を渡したとき

「条件3」を渡したときは、どの条件にも一致しないので終了します。

> test 条件3
引数が条件にヒットしなかった→終了
終了

あとがき

引数のあたいで処理分岐するバッチファイルについてでした!

Visual Studioでビルド時に、勝手にコピーしてもらったりするために作りましたが、なかなかいい感じです。

とはいえコピーでやるなら、robocopyとか使ったほうが早かったんじゃ……

とか後々思ったのは内緒です(笑)

使えるケースは他にもあると思うので、是非試してみてください!