Windows バッチファイル(.bat)で10以上のコマンド引数に対応する方法
Windows のバッチファイル(.bat)では、%n で n 番目のコマンド引数を取得できますが、2桁番目の引数を例えば %10 では取得できません。今回のその回避方法についてです。
10以上のコマンド引数を素直に取得した場合
まずは論より証拠で以下のバッチファイル(sample1.bat)を作って実行してみます。
@echo off
echo パラメータ:[%*]
echo 02番目のパラメータ:[%2]
echo 12番目のパラメータ:[%12]
echo 15番目のパラメータ:[%15]
goto :EOF
これに"a"~"l"の12個のパラメータを付けて実行してみます。

12番目のパラメータが “a2" ?? 15番目のパラメータなんてないのに “a5" ??ってことなんですが、これは単純に2桁の引数に対応できていないだけで、%10 なら %1 + “0" と解釈されているわけですね。
10以上のコマンド引数を扱えるようにする
これに対応するためには shift コマンドを使って引数をずらすしかありませんが、単純に shift を入れていくとコードが読みづらくなるので関数化してみました。
@echo off
echo パラメータ:[%*]
set ANS=
call :GETPARAM 2 %*
echo 02番目のパラメータ:[%ANS%]
call :GETPARAM 12 %*
echo 12番目のパラメータ:[%ANS%]
call :GETPARAM 15 %*
echo 15番目のパラメータ:[%ANS%]
goto :EOF
:GETPARAM
set /a cnt=1
set ANS=
:loop_start
if .%2==. goto :loop_end
if %cnt% == %1 set ANS=%2
shift /2
set /a cnt=%cnt%+1
goto :loop_start
:loop_end
実行結果は以下の通りです。うまく取得できましたね。

ディスカッション
コメント一覧
まだ、コメントがありません