冷凝If语句批处理文件

A C*_*God 0 windows variables if-statement 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
Run Code Online (Sandbox Code Playgroud)

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

几个旁注

  • 此代码已经有效,除了缩小它之外不需要编辑.

  • 我知道有发现类似的问题在这里,但我不知道如何将它应用到我的问题.

Aac*_*ini 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
Run Code Online (Sandbox Code Playgroud)
  • values变量的初始化只需要在开始时进行一次
  • !values:/%c%/=!部分首先替换%c%变量; 然后尝试!values!使用延迟扩展从变量中删除由斜杠包围的这样的值.
  • 如果结果与原始变量不同%values%,则表示/%c%/字符串出现在内部 !values!.在这种情况下,执行exit.
  • /I在开关if为大写和小写(以及任何其他字母组合)命令检查%c%.

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

编辑:正如用户LotPings所示,/I在这种情况下没有必要包括交换机,因为在%var:old=new%替换中,old%var%值替换字符串不区分大小写.

  • 这里不需要`/ i`开关.字符串替换不区分大小写,值的剩余部分将与完整值具有相同的大小写.+1解决方案. (4认同)