@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= -無効