@ECHO OFF
SETLOCAL
SET options=option1 option2 anotheroption
SET switches=switch1 switch2 anotherswitch
CALL :readoptions %*
FOR %%i IN (%options% %switches% badoptions) DO IF DEFINED %%i (SET %%i) ELSE (ECHO %%i NOT set)
GOTO :eof
:readoptions
FOR %%i IN (%options% %switches% badoptions) DO (SET %%i=)
:optlp
SET _parm1=%1
IF NOT DEFINED _parm1 GOTO :EOF
FOR %%i IN (%switches%) DO IF %_parm1%==-%%i SET %%i=Y&(SET _parm1=)
IF NOT DEFINED _parm1 shift&GOTO :optlp
FOR %%i IN (%options%) DO IF %_parm1%==-%%i (
SET %%i=%2
IF DEFINED %%i shift&shift&(SET _parm1=)
)
IF DEFINED _parm1 SET badoptions=%badoptions% %1&SHIFT
GOTO :optlp
/options または /switches が必要な場合、変更は明らかなはずです
スイッチの任意のセットについて、スイッチ名を er に入れ、switches
同様にオプション名をoptions
. -switchname
コマンドラインに が見つかった場合、変数switchname
は Y に設定されます。それ以外の場合は設定されません。同様に、-optionname
が見つかった場合、次のパラメーターが変数 の値として設定されます。それ以外のoptionname
場合optionname
は設定されません。
指定されたスイッチ名でもオプション名でもオプション値でもないパラメータはすべて、badoptions
したがって、オプションとスイッチのセットを次のように指定すると、コマンドは次のようになります。
thisbatch -switch2 -option2 optionvalue -invalid
変数option1
、anotheroption
、switch1
およびanotherswitch
;をクリアします。セットswitch2
= Y ; セットoption2
=オプション値およびbadoptions
= -無効