Batch file 是否可以使用if-then命令检查多个变量,而不是一个

Batch file 是否可以使用if-then命令检查多个变量,而不是一个,batch-file,Batch File,基本上,你能做到这一点吗: if %num1% == 1 echo hi if %num1% == 5 echo hi if %num1% == 9 echo hi 以更简单的方式,例如: if %num1% == 1,5,9 echo hi 编辑:也许让我的意图更清楚了。@dxiv做了以下事情: for %%a in (1 5 9) do if %num1%==%%a echo hi 这很适合将if-then用于特定的数字。@dxiv执行了以下操作: for %%a in (1 5 9)

基本上,你能做到这一点吗:

if %num1% == 1 echo hi
if %num1% == 5 echo hi
if %num1% == 9 echo hi
以更简单的方式,例如:

if %num1% == 1,5,9 echo hi

编辑:也许让我的意图更清楚了。

@dxiv做了以下事情:

for %%a in (1 5 9) do if %num1%==%%a echo hi

这很适合将if-then用于特定的数字。

@dxiv执行了以下操作:

for %%a in (1 5 9) do if %num1%==%%a echo hi

这对于将if-then用于特定数字非常有效。

您还可以在宏中使用子字符串修改进行动态测试,例如:

@回音 集合列表=,1,2,3,5,8,13,21, Set num[1]=1 设置数值[2]=5 Set num[3]=9 如果%%n==2表示%%v英寸,则为12英寸内的%%n设置CompVal=!cVal!设置比较=!变量:,%%~v,=,!&如果不是!比较!瓦尔!Echo/%%~v位于VarElse Echo/%%~v未找到else Set cVal中= Setlocal EnableDelayedExpansion rem/*使用示例*/ rem/*从数组中搜索匹配的列表元素*/ 对于/F标记=2 Delims==%i in'Set num['Do%CompVal:Var=list%%%i rem/*在定义的列表变量中搜索特定整数*/ %CompVal:Var=列表%13;2;22;305
还可以在宏中使用子字符串修改进行动态测试,例如:

@回音 集合列表=,1,2,3,5,8,13,21, Set num[1]=1 设置数值[2]=5 Set num[3]=9 如果%%v in!cVal的%%n==2,则为%%n in!12DO设置CompVal=如果不设置,则设置CompVal=!Var:,%%~v,=,!&如果不设置,则设置CompVal!==!Var!Echo/%~v位于VarElse Echo/%~v未找到其他设置cVal= Setlocal EnableDelayedExpansion rem/*使用示例*/ rem/*从数组中搜索匹配的列表元素*/ 对于/F标记=2 Delims==%i in'Set num['Do%CompVal:Var=list%%%i rem/*在定义的列表变量中搜索特定整数*/ %CompVal:Var=列表%13;2;22;305
使用变量展开查找/替换来测试测试变量中是否嵌入了值。如果结果与原始测试值不匹配,则会找到相关值

setlocal enableDelayedExpansion
set "test= 1 5 9 "
if !test: %num% =! neq !test! echo Hi
如果您可能要处理大于等于10的数字,则test中的前导空格和尾随空格以及%num%左右的空格非常重要


与数字搜索无关,但此技术不区分大小写-它无法区分大小写。

使用变量展开查找/替换来测试测试变量中是否嵌入了值。如果结果与原始测试值不匹配,则会找到相关值

setlocal enableDelayedExpansion
set "test= 1 5 9 "
if !test: %num% =! neq !test! echo Hi
如果您可能要处理大于等于10的数字,则test中的前导空格和尾随空格以及%num%左右的空格非常重要


与数字搜索无关,但该技术不区分大小写-它无法区分大写和小写。

这里有另一种方法,在所有条件都为真时反转条件并跳过echo hi:

如果不是%num1%==1如果不是%num1%==5如果不是%num1%==9转到:跳过 回声嗨 :跳过 运算符==强制进行字符串比较,因此避免使用它以允许进行数字比较:

如果%num1%neq 1如果%num1%neq 5如果%num1%neq 9转到:跳过 回声嗨 :跳过 另一种方法是使用类似临时标志的变量:

设置跳过= 如果%num1%neq 1如果%num1%neq 5如果%num1%neq 9设置跳过= 如果未定义,则跳过回显hi
以下是另一种方法,如果所有条件均为真,则反转条件并跳过echo hi:

如果不是%num1%==1如果不是%num1%==5如果不是%num1%==9转到:跳过 回声嗨 :跳过 运算符==强制进行字符串比较,因此避免使用它以允许进行数字比较:

如果%num1%neq 1如果%num1%neq 5如果%num1%neq 9转到:跳过 回声嗨 :跳过 另一种方法是使用类似临时标志的变量:

设置跳过= 如果%num1%neq 1如果%num1%neq 5如果%num1%neq 9设置跳过= 如果未定义,则跳过回显hi
这回答了你的问题吗?@JohnWu不太清楚。也许我没听懂,但这更像是不同数字之间的一个范围,就像任何介于1-5之间的数字。我可能不清楚,但我想要的是不适合某个范围的数字。比如1,3,6,8。在15 9中尝试%%a如果%num1%==%a echo hi使用单百分比%a如果在cmd提示符下,而不是批处理文件。@dxiv是的,这能回答您的问题吗?@JohnWu不太明白。也许我不明白,但这更像是不同数字之间的一个范围,就像任何介于1-5之间的数字。我可能不清楚,但我想要的是数字不适合某个范围的东西。比如1,3,6,8。尝试%%如果%num1%==%%%a echo hi在cmd提示符下使用单个百分比%a,而不是批处理文件,则在1 5 9中使用a。@dxiv是这样做的