我想判断输入para是否有效,并且有一个有效字符串列表(说“aaa”,“bbb”,“ccc”,“ddd”是正确的),但我不喜欢使用if-else。我想要一个简单的方法来做到这一点。 我喜欢这样的东西:
set env=%1
for %%A in ("aaa" "bbb" "ccc" "ddd" ) do if "%env%"==%%A echo true else goto end
我不知道如何解决这个问题。
我想要的是:
set env=%1
if "%env%"neq"aaa" and "%env%"neq"bbb" and "%env%"neq"ccc"and "%env%"neq"ddd" (
goto end
)
感谢aschipfl和magoo。
我的决议如下:
for %%a in (aaa bbb ccc ddd ) do (
if "%env%"=="%%a" (
goto next
)
)
@echo Wrong parameter!
goto end
:next
答案 0 :(得分:1)
不知道您要做什么,但如果比较结果为真,那么您提供的代码将回显true else goto end
。
if "%env%"==%%A (echo true) else (goto end)
会在匹配项上回显true
,否则请转到end
。括号的定位至关重要 - ) else (
必须位于同一物理线上。
答案 1 :(得分:1)
首先,我想指出NEW_ZEND
/ 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
)
替换为%%A
,以确保即使您提供了"%%~A"
之类的字符串列表,也会将比较表达式的右侧部分始终放在引号内。
据我了解,如果第一个参数"aaa" bbb "ccc" ddd
与任何给定字符串不匹配,您想转到:end
。您的代码中存在逻辑错误,因为即使遇到匹配(因为仍然存在三个不匹配),您将始终跳转到%1
,因此: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...
。