コマンドスクリプトで起動時の引数の個数を数える
メモ。個数を数えたいというか、バッチファイルでオーバーロードの真似事のようなことがしたい。つまり、異なる引数で呼ばれても、類似の処理をさせたい。けど、良い方法がわからない。
人の書いたバッチを読んでたら、だいたい単純に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つ目のやり方で十分だなぁ。
以下、最近参考にさせてもらってるページ。