引数とは、コマンドライン上でバッチファイル の後方に記述してバッチプログラムに値を与えて処理する方法です。
バッチプログラムで処理したいファイルのパス名を与えたり、バッチプログラムの動作オプションを設定したりと利用方法は様々です。
汎用プログラムを作成する場合など非常に便利です。
引数は、半角スペースで区切って記述します。
例:program.batは、プログラムファイル。arg1、arg2、arg3は、引数として与えた値
c:\user>program.bat arg1 arg2 arg3
program.bat内のバッチプログラム
echo %0
echo %1
echo %2
echo %3
結果
c:\user\program.bat
arg1
arg2
arg3
しかし、バッチプログラム内で引数として利用できる変数は、指定されていて%0~%9までの10変数しかありません。
あまり利用することはないかもしれませんが、バッチプログラムの動作切り替えスイッチのように利用する場合10を超える場合があります。
その場合、shift コマンドを使用します。このコマンドを一回実行すると、引数をひとつずつ変数をずらして入れ直します。
例:
c:\user>program.bat a b c d
program.bat内のバッチプログラム
echo %%1 %%2 %%3 %%4
echo %1 %2 %3 %4
shift
echo %%1 %%2 %%3 %%4
echo %1 %2 %3 %4
shift
echo %%1 %%2 %%3 %%4
echo %1 %2 %3 %4
結果
%1 %2 %3 %4
a b c d
%1 %2 %3 %4
b c d
%1 %2 %3 %4
c d
このshiftコマンドを利用すると10個以上の引数をプログラム上で利用できるようになります
例:引数を10以上でもshiftコマンドで読み出し、配列もどき変数に入れて利用できるようにするサンプルプログラム
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
REM 配列の要素番号になる数カウンタ
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
set /a "count=0"
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
REM 配列もどき「ARGS[?]」にすべての引数を代入(ループ)
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
:SW_LOOP
if '%0'=='' (goto :SW_END)
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
REM 配列に引数を代入
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
set "ARGS[%count%]=%~0"
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
REM 配列番号を+1
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
set /a "count+=1"
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
REM shift シフトコマンドを利用して 引数を一つずらし変数に入れ込む
REM ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
shift
goto :SW_LOOP
:SW_END
※2024/02/18:修正:set "ARGS[!count!]=%~0" → set "ARGS[%count%]=%~0"