入力パラメーターのセットをコマンドとして受け取るコマンドラインユーティリティに取り組んでいます。これらの入力パラメーターは、定義済みの名前に対して検証されます。このユーティリティは、次の方法で呼び出されます。
runUtility.cmd -A -B x,y,z -C w
ここで、パラメーターは A、B、および C (- で始まるもの) です。現在、検証ルールは次のとおりです。
-UVW などの無効なパラメータを渡すことができないように、パラメータの名前は定義済みの名前と一致する必要があります。
パラメータには値がある場合とない場合があります。上記の例では、-A には値がありませんが、-B には x、y、z があり、-C には w があります。
入力を検証するために次のコードを作成しました。
:validate
set argument=%1
set argumentValue=%2
if "%argument%" == "-A" (
shift
goto validate
)
if "%argument%" == "-B" (
if "%argumentValue%" == "" (
echo Empty value for -B
goto end
)
shift
shift
goto validate
)
if "%argument%" == "-C" (
if "%argumentValue%" == "" (
echo Empty value for -C
goto end
)
shift
shift
goto validate
)
if %argument%" == "" (
goto end
)
Argument %argument% is invalid
:end
しかし、これは機能していないようです。-B にはカンマ区切りの値があるため、B が 2 つのシフトを実行すると、次の反復で y が %1 になり、z が %2 になります。y はパラメーターではないため、「引数 y が無効です」というコードの最後の行で失敗します。実際にはコンマは SHIFT コマンドによって区切り文字として使用されるため、x、y、z は単一の値のままです。
x、y、z を単一の値として取得したい、またはこれを処理する他の方法はありますか? 私はバッチ スクリプトに少し慣れていません。FOR ループを試しましたが、すべての反復で %1 と %2 を一緒に取得できませんでした。