Batch file 字符串中的windows批处理文件循环
我想判断输入参数是否有效,并有一个有效字符串列表(说“aaa”、“bbb”、“ccc”、“ddd”是正确的),但我不喜欢使用if-else。我想要一个简单的方法来做到这一点。 我喜欢这样的东西:Batch file 字符串中的windows批处理文件循环,batch-file,Batch File,我想判断输入参数是否有效,并有一个有效字符串列表(说“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%"n
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
不知道您想做什么,但是如果比较结果为真,您所展示的代码将回显
true,否则转到end
if "%env%"==%%A (echo true) else (goto end)
将在匹配时回显
true
,否则转到end
。括号的位置很关键-)否则(
必须在同一物理行上。不知道您要做什么,但是如果比较为真,您所呈现的代码将响应真,否则转到结尾
if "%env%"==%%A (echo true) else (goto end)
将在匹配时回显true
,否则转到end
。括号的位置非常关键-)否则(
必须在同一条物理线上。首先,我想指出if
/else
子句的一个基本问题:
如果“%env%”=%%A echo true,则转到结束
解析器将比较表达式后的整个部分视为一个命令行,因此,如果比较为正,则将回显true else goto end
。要解决此问题,您需要通过放置括号来显示if
语句结束处的解析器,如下所示:
如果“%env%”==“%%~A”(echo true),则转到结束
…或者,如果要将其分散到多行:
如果“%env%”==“%%~A”(
回音正确
)否则(
转到终点
)
此外,我将%%A
替换为“%%A”
,以确保即使您提供了“aaa”bbb“ccc”ddd之类的字符串列表,也始终将比较表达式的正确部分放在引号中
据我所知,如果第一个参数%1
与任何给定字符串都不匹配,您希望转到:end
。代码中存在逻辑错误,因为即使遇到匹配项,您也将始终跳转到:end
(因为此时仍有三个不匹配项),因此肯定会执行else
子句(假设您如前所述更正了if
/else
语法)
您可以按如下方式更改代码(使用指示已找到匹配项的标志变量):
set“FLAG=”
对于“aaa”“bbb”“ccc”“ddd”中的%%A,请执行以下操作(
如果“%$1”==“%%~A”(
设置“FLAG=true”
)
)
如果未定义标志转到:结束
rem//如果找到匹配项,将继续执行此操作。。。
或者,您可以这样做(使用另一个goto
离开循环):
对于“aaa”“bbb”“ccc”“ddd”中的%%A(
如果“%$1”==“%%~A”(
后藤:找到了
)
)
后藤:结束
:找到
rem//如果找到匹配项,将继续执行此操作。。。
请注意,上面的代码片段进行区分大小写的字符串比较;要改变这种情况,请首先使用if/I
,我想指出if
/else
子句的一个基本问题:
如果“%env%”=%%A echo true,则转到结束
解析器将比较表达式后的整个部分视为一个命令行,因此,如果比较为正,则将回显true else goto end
。要解决此问题,您需要通过放置括号来显示if
语句结束处的解析器,如下所示:
如果“%env%”==“%%~A”(echo true),则转到结束
…或者,如果要将其分散到多行:
如果“%env%”==“%%~A”(
回音正确
)否则(
转到终点
)
此外,我将%%A
替换为“%%A”
,以确保即使您提供了“aaa”bbb“ccc”ddd之类的字符串列表,也始终将比较表达式的正确部分放在引号中
据我所知,如果第一个参数%1
与任何给定字符串都不匹配,您希望转到:end
。代码中存在逻辑错误,因为即使遇到匹配项,您也将始终跳转到:end
(因为此时仍有三个不匹配项),因此肯定会执行else
子句(假设您如前所述更正了if
/else
语法)
您可以按如下方式更改代码(使用指示已找到匹配项的标志变量):
set“FLAG=”
对于“aaa”“bbb”“ccc”“ddd”中的%%A,请执行以下操作(
如果“%$1”==“%%~A”(
设置“FLAG=true”
)
)
如果未定义标志转到:结束
rem//如果找到匹配项,将继续执行此操作。。。
或者,您可以这样做(使用另一个goto
离开循环):
对于“aaa”“bbb”“ccc”“ddd”中的%%A(
如果“%$1”==“%%~A”(
后藤:找到了
)
)
后藤:结束
:找到
rem//如果找到匹配项,将继续执行此操作。。。
请注意,上面的代码段会进行区分大小写的字符串比较;要更改这一点,请使用if/I
的可能重复