、私は句if
/else
の基本的な問題を指摘したい:
if "%env%"==%%A echo true else goto end
場合、パーサーは、したがって、単一のコマンドラインとして比較式の後部分全体を扱います比較が肯定的である場合、true else goto end
がエコーされることになります。あなたはif
文はこのように、括弧を置くことによって終了パーサを表示する必要があることを解決するには...:
if "%env%"=="%%~A" (echo true) else goto end
...またはこれを、あなたは複数行、それに広がるしたい場合:
を
if "%env%"=="%%~A" (
echo true
) else (
goto end
)
さらに、"aaa" bbb "ccc" ddd
のような文字列のリストを提供した場合でも、比較式の右部分が常に引用符内に配置されるように、を"%%~A"
に置き換えました。
は、私の知る限り理解しますが、最初の引数%1
は、与えられた文字列のいずれにも一致しない場合には:end
に行きたいです。一致が見つかった場合でも(常に3つの不一致があるため)常に:end
にジャンプするため、else
句が確実に実行されます(if
を修正したとします)/else
)。
次のようにあなたは(一致が検出されたことを示すFLAG
変数を使用して)、コードを変更することができます:
:
また
set "FLAG="
for %%A in ("aaa" "bbb" "ccc" "ddd") do (
if "%~1"=="%%~A" (
set "FLAG=true"
)
)
if not defined FLAG goto :end
rem // Execution continues here in case a match has been found...
、あなたはこれを(ループを残すために、別のgoto
を使用して)行うことができます
for %%A in ("aaa" "bbb" "ccc" "ddd") do (
if "%~1"=="%%~A" (
goto :found
)
)
goto :end
:found
rem // Execution continues here in case a match has been found...
上記のコードスニペットでは、大文字と小文字を区別する文字列の比較を行います。それを変更するには、if /I
を使用してください。
[DOSバッチファイル内の文字列のリストに文字列が含まれているかどうかを調べる方法](http://stackoverflow.com/questions/11235153/how-to-find-if-a-string- dos-batch-file-in-stringのリストです) –