バッチファイルへの引数
バッチファイルを活用した処理の規模がある程度大きくなってくると、同じような処理が複数個所に出てくることがあります。
こういった場合、処理を共通化するために、関数を利用したり、別のバッチファイルを呼び出したりすることで、バッチファイルの見通しが良くなり、バッチファイルの保守性が向上します。
その際に必要となるのが、バッチファイルへ引数を渡す処理です。
この記事では、バッチファイルへ引数を渡す方法と具体的なサンプルコードを紹介します。
バッチファイルへ引数を渡す方法
バッチファイルへ引数を渡す方法は非常にシンプルで、callコマンド、もしくはstartコマンドを実行する際に、続けて引数を記述するだけです。
以下のコードはcallコマンドを使用した場合の例です。
call sample.cmd test
startコマンドでは、最初の引用符付き文字列がウィンドウタイトルとして解釈されます。実行ファイルのパスを引用符で囲む可能性がある場合は、空のタイトル "" を先頭に置く書き方が安全です。
start "" sample.cmd test
start "C:\My Scripts\job.cmd"
のように書くと、最初の引用符付き文字列がファイルパスではなくタイトルとして解釈されます。空文字のタイトルを先に入れて、start "" "C:\My Scripts\job.cmd" のように書くのが定石とされています。
callコマンド、startコマンドについての詳細は、以下の記事を参照してください。
受け取った引数を利用する
バッチファイルへ引数を渡すことができたら、次は受け取った引数を利用する方法を紹介します。
バッチファイルへ引数を渡すと、%1、%2、%3、…といった形で、引数が順番に変数に格納されます。
callコマンドの例
例として、以下のようなバッチファイルsample.cmdを作成します。
@echo off
setlocal
echo 受け取った引数は%1です。
echo 2つ目の引数は%2です。
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。
引数を 1 つしか渡していないため、%2には何も格納されていません。
複数の引数を渡した場合は、以下のように出力されます。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
startコマンドの例
前述しましたが、startコマンドの場合は、タイトルを指定する必要があるため、タイトル、実行するファイルのパス、引数の順番で記述します。
例として、以下のようなバッチファイルsample.cmdを作成します。
@echo off
setlocal
echo 受け取った引数は%1です。
echo 2つ目の引数は%2です。
pause
endlocal
このバッチファイルに引数を渡して実行すると、新しいコマンドプロンプトが開き、以下のように出力されます。
引数の数を確認する
バッチファイルへ引数を渡すことができたら、次は受け取った引数の数を確認する方法を紹介します。
%*には受け取った引数全体が格納されますが、引数に空白が含まれる場合まで厳密に扱いたいなら、shiftを使って 1 つずつ数える方が安全です。
例として、以下のようなバッチファイルsample.cmdを作成します。
@echo off
setlocal
set count=0
:count_loop
if "%~1"=="" goto count_end
set /A count+=1
shift
goto count_loop
:count_end
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コマンドを使うことで、受け取った引数を削除し、残りの引数をひとつずつずらすことができます。
shift を繰り返し使うことで、%9 を超える引数も順番に処理できます。また、%* は shift
を実行しても変化しない点も覚えておくと便利です。
受け取った引数それぞれに処理を行う
前述した考え方を応用すると、受け取った引数それぞれに順番に処理を行うことができます。
例として、以下のようなバッチファイルsample.cmdを作成します。
@echo off
setlocal
:loop
if "%~1"=="" goto end
echo 受け取った引数は%~1です。
shift
goto loop
:end
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。