我有这个批处理脚本有很多“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"
如果全部为真,它将只运行下一行。