コマンドスクリプトで起動時の引数の個数を数える

メモ。個数を数えたいというか、バッチファイルでオーバーロードの真似事のようなことがしたい。つまり、異なる引数で呼ばれても、類似の処理をさせたい。けど、良い方法がわからない。

人の書いたバッチを読んでたら、だいたい単純にn個目の引数の有無を見て処理分岐してる。

@echo off

set condate=-
set zero=0

if "%1" == "" goto ERROR
if "%2" == "" goto ERROR
if "%3" == "" goto setShortDate
if "%4" == "" goto setFullDate

rem 引数が3つのときは年月日とみなす
:setFullDate

set year=%1
if %2 LSS 10 (set month=%zero%%2) else (set month=%2)
if %3 LSS 10 (set day=%zero%%3) else (set day=%3)

set fulldate=%year%%condate%%month%%condate%%day%
echo %fulldate%
goto :EOF

rem 引数が2つのときは月日とみなす
:setShortDate

if %1 LSS 10 (set month=%zero%%1) else (set month=%1)
if %2 LSS 10 (set day=%zero%%2) else (set day=%2)

set shortdate=%month%%condate%%day%
echo %shortdate%
goto :EOF

rem 引数が1以下のときはエラーにする
:ERROR
echo 引数が2〜3個必要です。(MM, dd) or (yyyy, MM, dd)
goto :EOF

こういうやり方しかないのかな?? と思ったら。。。

%*

で引数セットを取ってきて、for文で回してカウントする方法があるみたい。しかし、リンク先でもいわれているように、処理分岐なら1つ目のやり方で十分だなぁ。

以下、最近参考にさせてもらってるページ。