Batch file 字符串中的windows批处理文件循环

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

我想判断输入参数是否有效,并有一个有效字符串列表(说“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

不知道您想做什么,但是如果比较结果为真,您所展示的代码将回显
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

的可能重复