バッチファイルへの引数

にメンテナンス済み

バッチファイルを活用した処理の規模がある程度大きくなってくると、同じような処理が複数個所に出てくることがあります。

こういった場合、処理を共通化するために、関数を利用したり、別のバッチファイルを呼び出したりすることで、バッチファイルの見通しが良くなり、バッチファイルの保守性が向上します。

その際に必要となるのが、バッチファイルへ引数を渡す処理です。

この記事では、バッチファイルへ引数を渡す方法と具体的なサンプルコードを紹介します。

バッチファイルへ引数を渡す方法

バッチファイルへ引数を渡す方法は非常にシンプルで、callコマンド、もしくはstartコマンドを実行する際に、続けて引数を記述するだけです。

以下のコードはcallコマンドを使用した場合の例です。

call sample.cmd test

startコマンドの場合は、タイトルを指定する必要があるため、タイトル、実行するファイルのパス、引数の順番で記述します。

start "sample" sample.cmd test

callコマンド、startコマンドについての詳細は、以下の記事を参照してください。

受け取った引数を利用する

バッチファイルへ引数を渡すことができたら、次は受け取った引数を利用する方法を紹介します。

バッチファイルへ引数を渡すと、%1%2%3、…といった形で、引数が順番に変数に格納されます。

callコマンドの例

例として、以下のようなバッチファイルsample.cmdを作成します。

sample.cmd
@echo off
setlocal

echo 受け取った引数は%1です。

echo 2つ目の引数は%2です。

endlocal

このバッチファイルに引数を渡して実行すると、以下のように出力されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>call sample.cmd test
受け取った引数はtestです。
2つ目の引数はです。
C:\users\user>

引数を 1 つしか渡していないため、%2には何も格納されていません。

複数の引数を渡した場合は、以下のように出力されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>call sample.cmd test1 test2
受け取った引数はtest1です。
2つ目の引数はtest2です。
C:\users\user>

startコマンドの例

前述しましたが、startコマンドの場合は、タイトルを指定する必要があるため、タイトル、実行するファイルのパス、引数の順番で記述します。

例として、以下のようなバッチファイルsample.cmdを作成します。

sample.cmd
@echo off
setlocal

echo 受け取った引数は%1です。

echo 2つ目の引数は%2です。

pause

endlocal

このバッチファイルに引数を渡して実行すると、新しいコマンドプロンプトが開き、以下のように出力されます。

×
コマンド プロンプトのアイコン
sample
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>
受け取った引数はtestです。
2つ目の引数はです。
続行するには何かキーを押してください …

引数の数を確認する

バッチファイルへ引数を渡すことができたら、次は受け取った引数の数を確認する方法を紹介します。

バッチファイルへ引数を渡すと、%*には、渡された引数が全て格納されます。

このため、%*の値をforコマンドで分割することで、引数の数を確認することができます。

例として、以下のようなバッチファイルsample.cmdを作成します。

sample.cmd
@echo off
setlocal

set count=0

for %%i in (%*) do (
  set /a count+=1
)

echo 引数の数は%count%個です。

endlocal

このバッチファイルに引数を渡して実行すると、以下のように出力されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>call sample.cmd test1 test2 test3
引数の数は3個です。
C:\users\user>

shiftコマンドを使った引数の削除

shiftコマンドを使うことで、受け取った引数を削除し、残りの引数をひとつずつずらすことができます。

例として、以下のようなバッチファイルsample.cmdを作成します。

sample.cmd
@echo off
setlocal

echo 受け取った引数は%1です。
shift
echo 2つ目の引数は%1です。
shift
echo 3つ目の引数は%1です。

endlocal

このバッチファイルに引数を渡して実行すると、以下のように出力されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>call sample.cmd test1 test2 test3
受け取った引数はtest1です。
2つ目の引数はtest2です。
3つ目の引数はtest3です。
C:\users\user>

echoコマンドでは、すべて%1を参照していますが、出力はしっかり 1 つ目、2 つ目、3 つ目の引数になっています。

このように、shiftコマンドを使うことで、受け取った引数を削除し、残りの引数をひとつずつずらすことができます。

受け取った引数それぞれに処理を行う

前述した引数の数を数える方法を応用することで、受け取った引数それぞれに処理を行うことができます。

例として、以下のようなバッチファイルsample.cmdを作成します。

sample.cmd
@echo off
setlocal

for %%i in (%*) do (
  echo 受け取った引数は%%iです。
)

endlocal

このバッチファイルに引数を渡して実行すると、以下のように出力されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>call sample.cmd test1 test2 test3
受け取った引数はtest1です。
受け取った引数はtest2です。
受け取った引数はtest3です。
C:\users\user>

練習問題

練習問題1

コマンドプロンプトからバッチファイルを呼び出す際に引数を渡す方法として適切なものを選択してください。

回答がサーバーに送信されることはありません
練習問題2

複数の数値を引数として渡したい場合、以下のうち正しい記述はどれでしょうか。

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #引数 #コマンドライン #コマンド