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

実行結果は以下の通りです。うまく取得できましたね。

実行結果

Windows

Posted by takmaru