バッチファイルへの引数
バッチファイルへ引数を渡すには、実行時にバッチファイル名の後ろへ値をスペース区切りで並べます。バッチファイル側では%1、%2、…で受け取れます。
処理を共通化するために別のバッチファイルを呼び出すときなどに必要となる、この引数の渡し方と受け取り方を、サンプルコードつきで紹介します。
バッチファイルへ引数を渡す方法
バッチファイルへ引数を渡す方法は非常にシンプルで、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
このバッチファイルに引数を渡して実行すると、新しいコマンドプロンプトが開き、以下のように出力されます。
引用符の除去と先頭の引数(%~1、%0)
引数にスペースを含む値を渡すときは"で囲みます(例:call sample.cmd "My File.txt")。このとき%1には引用符も含まれますが、%~1と書くと引用符を除いた値を取得できます。
また、%0にはバッチファイル自身の名前が入ります。%~dp0と書くと、バッチファイルが置かれているフォルダのパスを取得できます。
引数の数を確認する
バッチファイルへ引数を渡すことができたら、次は受け取った引数の数を確認する方法を紹介します。
%*には受け取った引数全体が格納されますが、引数に空白が含まれる場合まで厳密に扱いたいなら、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コマンドを使うことで、受け取った引数を削除し、残りの引数をひとつずつずらすことができます。
%1〜%9までしか直接参照できませんが、shift を繰り返し使うことで、%9 を超える引数も順番に処理できます。また、%* は shift
を実行しても変化しない点も覚えておくと便利です。
受け取った引数それぞれに処理を行う
前述した考え方を応用すると、受け取った引数それぞれに順番に処理を行うことができます。
例として、以下のようなバッチファイルsample.cmdを作成します。
@echo off
setlocal
:loop
if "%~1"=="" goto end
echo 受け取った引数は%~1です。
shift
goto loop
:end
endlocal
このバッチファイルに引数を渡して実行すると、以下のように出力されます。