目次
引数の確認
バッチファイルに引数を指定した場合、バッチファイル内で引数を利用したいときにはプレースホルダー「%?(?は1~9の数字)」を参照すればよいでしょう。引数の指定方法や利用方法は「%1,%2…%X(引数とプレースホルダー)」に詳しく解説しています。
例えば、以下のように引数を指定してバッチファイル「arg_test.bat」を実行した場合を考えてみましょう。
1 |
arg_test.bat one two three four five |
5つの引数「one」、「two」、「three」、「four」、「five」を指定しました。これらをバッチファイル「arg_test.bat」内で利用する場合はプレースホルダー「%1~%5」を使用します。「arg_test.bat」に以下のようなプログラムを記述して確認してみます。
1 2 3 4 5 6 7 |
@echo off echo 第1引数は「%1」です。 echo 第2引数は「%2」です。 echo 第3引数は「%3」です。 echo 第4引数は「%4」です。 echo 第5引数は「%5」です。 |
以下は実行結果です。
「%1」~「%5」に一つずつ引数が格納されていることが分かります。
すべての引数を一括取得する
前章では、引数を「%?」を使用して一つずつ確認しましたが、「%*」を使用すればすべての引数をまとめて表示できます。前節のバッチファイルを以下のように書き換えます。
1 2 3 4 5 6 7 8 9 |
@echo off echo 第1引数は「%1」です。 echo 第2引数は「%2」です。 echo 第3引数は「%3」です。 echo 第4引数は「%4」です。 echo 第5引数は「%5」です。 echo すべての引数は「%*」です。 |
最後の行に「%*」の表示を加えました。以下、実行結果です。
このように、「%*」には指定したすべての引数が格納されているようです。
使い道としては、「for」コマンドを使用して引数を一つずつ読み込むときに「%*」を使用すると便利でしょう。以下は、「%*」を使用して引数を一つずつ呼び出したバッチファイルの例です。
1 2 3 4 5 6 |
@echo off rem すべての引数を順番に表示 for %%f in (%*) do ( echo %%f ) |
4行目の「for」コマンドの「in ( )」の括弧内に「%*」として、すべての引数を指定しています。これを実行すると、以下のようになります。
このように、「for」コマンドの「%%f」に一つずつ順番に引数を代入してループ処理をさせることが可能です。
「%*」には「%0」は含まれない
ちなみに、「%0」には通常、実行したバッチファイル名が格納されていますが、「%*」には「%0」は含まれません。あくまでも引数のみが格納されています。すなわち、「%1~」です。これは、前節で示したように、ループ処理などを行うとき種類の違うバッチファイル名などが含まれていると不便だからと考えられます。
追記:本記事は、abc様からご質問を頂き追加しました。ありがとうございました。