バッチファイルで10個以上の引数を使う

バッチファイルでは引き渡された値を最大 9 個までしか参照することができませんが、 SHIFT コマンドを使用することで 10 個目以降の引数の値を参照することができます。ここではバッチファイルで 10 個以上の引数を使う方法について解説します。

(Last modified: )

10個目以降の引数を参照してみる

バッチファイルでは実行する時に記述する引数の数に制限はありません。そのため、10個以上の引数を指定しても問題はありません。(ただしコマンドラインの文字数の制限はあるようです。詳しくはMicrosoft社の解説ページを参照ください)。

バッチファイル 引数1 引数2 ... 引数10 引数11

ただ引き渡された値を使用するバッチファイル側では、引数の値を取り出すのに使用する %1 ~ %9 が 9 個しかありません(%0 は実行しているバッチファイルの名前を参照するのに使用されます)。 %10 や %11 のような記述は使用できないため、最大で 9 個までの引数の値しか参照できません。

%10 などが使用できないかどうかのテストを行うために次のような簡単なバッチファイル argtest.bat を c:\ に作成しました。

@echo off
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
echo %%6 = %6
echo %%7 = %7
echo %%8 = %8
echo %%9 = %9
echo %%10 = %10
echo %%11 = %11

それではバッチファイルに引数を 11 個指定して次のように実行します。

argtest.bat A B C D E F G H I J K

実行した結果は次のようになります。

10個目以降の引数を参照してみる(1)

バッチファイル名が入る %0 と、引数の 1 番目から 9 番目に対応する %1 ~ %9 までは引数の値を参照できていますが、 %10 の値が A0 となっています。これは 10 番目の引数の値を参照したのではなく、 1 番目の引数の値を参照する「%1」+文字列の「0」と処理されたためです。そのため、 1 番目の引数の値 A と文字列の 0 で A0 と表示されています。 %11 の値も同じです。

10 個以上の引数の値を参照したい場合には SHIFT コマンドを使用します。

SHIFTコマンドの使い方

SHIFT コマンドを使うと %0 から %9 で参照する引数を左にずらすことができます。書式は次の通りです。

SHIFT [/n]

SHIFT コマンドを引数無しで実行すると、例えば %1 が参照する引数の値が 1 番目ではなく 2 番目のものとなります。同じように %2 は 3 番目の引数を参照するようになり、最後の %9 は 10 番目の引数を参照するようになります。結果として 10 番目の引数の値を参照することができるようになります。 SHIFT コマンドをもう一度実行すれば、今度は %1 は 3 番目の引数を参照し、 %9 は 11 番目の引数を参照します。

注意点として、SHIFT コマンドを実行すると %0 は 1 番目の引数を参照するにようなりますが、もともと %0 で参照できていた実行しているバッチファイルの名前は参照できなくなります。 SHIFT コマンドを実行するたびに %0 から %9 で参照する対象がずれていきますので、対象でなくなった引数の値は参照することができなくなります。すべての引数の値をあとから使用したい場合は、参照できなくなり前に変数に格納しておく必要があります。

それでは SHIFT コマンドを試してみます。バッチファイルを次のように変更しました。

@echo off
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
echo %%6 = %6
echo %%7 = %7
echo %%8 = %8
echo %%9 = %9

echo.
shift
echo SHIFTを実行
echo.

echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
echo %%6 = %6
echo %%7 = %7
echo %%8 = %8
echo %%9 = %9

echo.
shift
echo SHIFTを実行
echo.

echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
echo %%6 = %6
echo %%7 = %7
echo %%8 = %8
echo %%9 = %9

それではバッチファイルに引数を 11 個指定して次のように実行します。

argtest.bat A B C D E F G H I J K

実行結果は次のようになります。

SHIFTコマンドの使い方(2)

SHIFT コマンドを実行するたびに、%0 ~ %9 が参照する引数がずれていっていることが確認できます。

シフトする開始位置を指定する

SHIFT コマンドを実行すると %0 から %9 で参照する引数を左にずれますが、 SHIFT コマンドを実行する時に「/開始位置」オプションを指定することで、左へずれる引数の開始位置を指定できます。例えば「/3」と指定した場合、SHIFT コマンドを実行すると %3 は 3 番目ではなく 4 番目の引数を参照するようになりますが、 %0 ~ %2 については変更がありません。

それでは試してみます。バッチファイルを次のように変更しました。

@echo off
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
echo %%6 = %6
echo %%7 = %7
echo %%8 = %8
echo %%9 = %9

echo.
shift /3
echo SHIFT /3 を実行
echo.

echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
echo %%6 = %6
echo %%7 = %7
echo %%8 = %8
echo %%9 = %9

それではバッチファイルに引数を11個指定して次のように実行します。

argtest.bat A B C D E F G H I J K

実行した結果は次のようになります。

シフトする開始位置を指定する(1)

%0 %1 %2 については SHIFT コマンドを実行したあとも参照する対象の引数が変わっていません。 %3 以降が左へ 1 つずつずれていることが確認できます。

-- --

SHIFT コマンドを使ってバッチファイルで10個以上の引数を渡す方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。