9

文字列のリストに基づいて、バッチ ファイルへの引数が有効かどうかを確認したいと思います。

例えば:

IF %1 IN validArgument1, validArgument2, validArgument3 SET ARG=%1

これは、一致した場合にのみ、ARG を有効な引数の 1 つに設定します。理想的には、大文字と小文字を区別しません。

4

2 に答える 2

6

配列アプローチを使用することもできます。

setlocal EnableDelayedExpansion

set arg[1]=validArgument1
set arg[2]=validArgument2
set arg[3]=validArgument3

for /L %%i in (1,1,3) do if /I "%1" equ "!arg[%%i]!" SET "ARG=!arg[%%i]!"

私の意見では、この方法は複数のオプションを使用して管理する方が明確で簡単です。たとえば、次の方法で有効な引数の配列を作成できます。

set i=0
for %%a in (validArgument1 validArgument2 validArgument3) do (
   set /A i+=1
   set arg[!i!]=%%a
)

別の可能性は、有効な引数ごとに変数を定義することです。

for %%a in (validArgument1 validArgument2 validArgument3) do set %%a=1

...次に、次のようにパラメータを確認します。

if defined %1 (
   echo %1 is valid option...
   SET ARG=%1
)
于 2012-06-28T02:51:07.547 に答える
5

堅牢な方法は、遅延展開を使用することです

setlocal enableDelayedExpansion
set "validArgs=;arg1;arg2;arg3;"
if "!validArgs:;%~1;=!" neq "!validArgs!" set ARG=%1

CALL と通常の展開を組み合わせて実行することもできますが、パラメーターの値によっては失敗する可能性が高くなります。

set "validArgs=;arg1;arg2;arg3;"
call set "test=%%validArgs:;%~1;=%%"
if "%test%" neq "%validArgs%" set ARG=%1

上記の両方の手法には、有効な引数に含めることができ=ず、引数を で開始してはならないという制限があります*

有効な引数のいずれにも含まれていない限り、次のブルート フォース メソッドを使用することもできます* ? , ; =<space>

set "validArgs=arg1;arg2;arg3"
for %%A in (%validArgs%) if /i "%~1"=="%%A" set ARG=%1

この引数パーサーを見たいと思うかもしれません。そのコードを適応させることも、独自の戦略のアイデアを生み出すこともできます。

于 2012-06-27T22:06:33.093 に答える