冷凝如果声明batch file

我有这个批处理脚本有很多“if语句”。 这里有几行我有什么:

if %c%==PC exit if %c%==pc exit if %c%==CMD exit if %c%==cmd exit if %c%==MENU exit if %c%==menu exit if %c%==KILL exit if %c%==kill exit 

有更多的可能性,如果可能的话,真的可以使用一些简化。 那么有没有办法可以简化这个? 也许类似,如果variablesc等于任何这些退出。 甚至使if语句的情况变得不可信这可能吗? 真的,任何简化这个方法都会很棒,可以大大减less我的批处理脚本的大小。

一对夫妇侧面说明

  • 这个代码已经可以工作,除了冷凝它之外,不需要编辑。

  • 我知道这里有类似的问题,但我不知道如何将其应用于我的问题。

IF命令的帮助。 / I开关,如果指定,说做不区分大小写的字符串比较。 / I开关也可以用于IF的string1 == string2形式。

 if /I %c%==PC exit if /I %c%==CMD exit if /I %c%==MENU exit if /I %c%==KILL exit 

这是最短的方法:

 rem Next line is necessary to nest the value of one variable inside another one setlocal EnableDelayedExpansion rem Initialize the list of values enclosed by slash set "values=/PC/CMD/MENU/KILL/" if /I "!values:/%c%/=!" neq "%values%" exit 
  • values的初始化变量只需要在一开始就做一次
  • !values:/%c%/=! 部分首先替换%c%变量; 然后尝试从!values!删除一个由斜线包围的!values! 变量使用延迟扩展。
  • 如果结果与原始%values%变量不同,则表示/%c%/ string出现 !values! 。 在这种情况下,执行exit
  • /I切换到if命令检查%c%大写和小写(以及任何其他字母组合)。

这个方法还允许以最简单的方式在if命令中插入else部分,因为只有一个if

编辑 :当用户LotPings指出,在这种情况下没有必要包含/I开关,因为在%var:old=new%替换中,从%var%值替换old字符串是不区分大小写的。

你可以使用一个数组:

 set arr=PC pc CMD cmd MENU menu KILL kill for %%a in (%arr%) do ( if %c%==%%a exit ) 

对于多个值,将if行替换为:

 if %c%=="PC" if %c%=="pc" 

如果全部为真,它将只运行下一行。