Categories: Windows

バッチファイル(bat)に10個以上の引数を渡して実行する方法

バッチファイルを用いて複雑な処理を実行するときに、あるバッチファイルから他のバッチファイルを複数の引数を渡して実行したりすることがあります。

このときに使用するコマンド「call」と「start」については以前の記事でまとめました。

バッチファイルを用いて複雑な処理を実行するときに、あるバッチファイルから他のバッチファイルを実行したい場合があります。 本記事では、...

ただし、これらのコマンドを用いて10個以上の引数を渡そうとしたときに、書き方を工夫する必要があります。

今回は、10個以上の引数を与えてバッチファイルを実行する方法を紹介します。

10個以上の引数を与えた場合の動作

以下に、10個以上の引数を与える場合のバッチファイルのサンプルを示します。引数「a」~「l」を渡してcallコマンドで「child.bat」を実行します。

@echo off
call child.bat a b c d e f g h i j k l
pause
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
echo %11
echo %12

「child.bat」内では「%1」「%2」……で引数にアクセスすることができます。今回は12個の引数を与えているので「%1」から「%12」までをechoコマンドで表示してみます。

実行結果は以下の通りとなります。

「%10」「%11」「%12」に該当する「j」「k」「l」が正常に表示されていません。これは「%10」が「%1」+「0」と解釈されていて、%1に該当する「a」と数字の「0」が表示されています。

この通り、バッチファイルで10個以上の引数を扱おうとする場合、素直な書き方では上手く実行できないことがわかります。

解決方法

一番簡単なのはshiftコマンドを利用することです。

shiftコマンドを使うと、格納されている引数の番号を一個ずらして格納し直すことができます。すなわち、以下のように引数の番号が一個ずれます。

  • 「%2」の中身が「%1」にずれる
  • 「%3」の中身が「%2」にずれる
  • 「%4」の中身が「%3」にずれる

これを使うことで、%10以降に入っている引数を%1~%9にずらすことができます。

例えば「%10」から「%12」までの変数にアクセスしたい場合には、シフトを3回行うことで

  • 「%10」→「%7」
  • 「%11」→「%8」
  • 「%12」→「%9」

となり、「%7」~「%9」を利用することでアクセスすることができます。

実行例としては以下のようになります。

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

正しく「j」「k」「l」が表示されていることがわかります。

Haruoka