バッチファイルへの引数
バッチファイルを活用した処理の規模がある程度大きくなってくると、同じような処理が複数個所に出てくることがあります。
こういった場合、処理を共通化するために、関数を利用したり、別のバッチファイルを呼び出したりすることで、バッチファイルの見通しが良くなり、バッチファイルの保守性が向上します。
その際に必要となるのが、バッチファイルへ引数を渡す処理です。
この記事では、バッチファイルへ引数を渡す方法と具体的なサンプルコードを紹介します。
バッチファイルへ引数を渡す方法
バッチファイルへ引数を渡す方法は非常にシンプルで、call
コマンド、もしくはstart
コマンドを実行する際に、続けて引数を記述するだけです。
以下のコードはcall
コマンドを使用した場合の例です。
call sample.cmd test
start
コマンドの場合は、タイトルを指定する必要があるため、タイトル、実行するファイルのパス、引数の順番で記述します。
start "sample" sample.cmd test
call
コマンド、start
コマンドについての詳細は、以下の記事を参照してください。
受け取った引数を利用する
バッチファイルへ引数を渡すことができたら、次は受け取った引数を利用する方法を紹介します。
バッチファイルへ引数を渡すと、%1
、%2
、%3
、…といった形で、引数が順番に変数に格納されます。
call
コマンドの例
例として、以下のようなバッチファイルsample.cmd
を作成します。
@echo off
setlocal
echo 受け取った引数は%1です。
echo 2つ目の引数は%2です。
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。
引数を 1 つしか渡していないため、%2
には何も格納されていません。
複数の引数を渡した場合は、以下のように出力されます。
start
コマンドの例
前述しましたが、start
コマンドの場合は、タイトルを指定する必要があるため、タイトル、実行するファイルのパス、引数の順番で記述します。
例として、以下のようなバッチファイルsample.cmd
を作成します。
@echo off
setlocal
echo 受け取った引数は%1です。
echo 2つ目の引数は%2です。
pause
endlocal
このバッチファイルに引数を渡して実行すると、新しいコマンドプロンプトが開き、以下のように出力されます。
引数の数を確認する
バッチファイルへ引数を渡すことができたら、次は受け取った引数の数を確認する方法を紹介します。
バッチファイルへ引数を渡すと、%*
には、渡された引数が全て格納されます。
このため、%*
の値をfor
コマンドで分割することで、引数の数を確認することができます。
例として、以下のようなバッチファイルsample.cmd
を作成します。
@echo off
setlocal
set count=0
for %%i in (%*) do (
set /a count+=1
)
echo 引数の数は%count%個です。
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。
shift
コマンドを使った引数の削除
shift
コマンドを使うことで、受け取った引数を削除し、残りの引数をひとつずつずらすことができます。
例として、以下のようなバッチファイルsample.cmd
を作成します。
@echo off
setlocal
echo 受け取った引数は%1です。
shift
echo 2つ目の引数は%1です。
shift
echo 3つ目の引数は%1です。
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。
各echo
コマンドでは、すべて%1
を参照していますが、出力はしっかり 1 つ目、2 つ目、3 つ目の引数になっています。
このように、shift
コマンドを使うことで、受け取った引数を削除し、残りの引数をひとつずつずらすことができます。
受け取った引数それぞれに処理を行う
前述した引数の数を数える方法を応用することで、受け取った引数それぞれに処理を行うことができます。
例として、以下のようなバッチファイルsample.cmd
を作成します。
@echo off
setlocal
for %%i in (%*) do (
echo 受け取った引数は%%iです。
)
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。