冷凝If语句批处理文件

时间:2017-03-11 13:54:31

标签: windows batch-file variables if-statement

我有这个批处理脚本有很多" 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

还有更多的可能性,如果有可能的话,真的可以使用一些简化。那么有什么办法可以简化这个吗?也许类似的事情,如果变量c等于其中任何一个退出。或甚至使if语句不明确这是否可能?实际上,任何简化此操作的方法都很棒,可以大大减小我的批处理脚本的大小。

一些附注

  • 此代码已经有效,除了缩小代码外无需编辑。

  • 我知道here发现了一个类似的问题,但我不知道如何将其应用到我的问题中。

3 个答案:

答案 0 :(得分:6)

这是最短的方法:

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%变量;然后尝试使用Delayed Expansion从!values!变量中删除斜杠所包含的值。
  • 如果结果与原始%values%变量的不同,则表示/%c%/字符串 !values!内显示。在这种情况下,请执行exit
  • /I命令中的if开关检查%c%中的大写和小写(以及任何其他字母组合)。

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

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

答案 1 :(得分:2)

来自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

答案 2 :(得分:1)

您可以使用数组:

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"

如果所有if都为真,它只会运行下一行。