【问题标题】:Condensing If Statement Batch File压缩 If 语句批处理文件
【发布时间】:2017-08-01 20:11:08
【问题描述】:

我有这个包含许多“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 发现了一个类似的问题,但我不知道如何将其应用于我的问题。

【问题讨论】:

  • 打开 cmd 提示符并输入:IF /?。我敢打赌那里有一个选项可以帮助你。

标签: windows batch-file variables if-statement


【解决方案1】:

这是最短的方法:

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% 变量不同,则意味着/%c%/ 字符串出现在内部 !values!。在这种情况下,执行exit
  • if 命令中的/I 开关检查%c% 中的大写和小写(以及任何其他字母组合)。

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

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

【讨论】:

  • 这里不需要/i 开关。字符串替换不区分大小写,值的其余部分将与完整值具有相同的大小写。 +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

【讨论】:

  • 所以如果我使用/I,那么我就不需要同时检查PCpc,对吧?
  • @BaliC,在我的世界里 4 小于 8。
  • 这行得通。我正在使用您的答案和第一个答案。两者都对我有帮助,因为两者都帮助我浓缩了我的剧本。我不知道该选谁作为最佳答案
  • @AChildofGod,如果您在 BaliC 的代码中使用 /I 开关,您只需要检查每个单词的一个实例。 for %%a in (pc cmd menu kill) do if /I %c%==%%a exit
【解决方案3】:

你可以使用数组:

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 都为真,它只会运行下一行。

【讨论】:

  • 另一件事。是否可以在一个 if 语句中使用两个产生相同结果的可选值?
  • 你们有谁要阅读IF 命令的帮助文件吗?
  • @Squashman 如果它都在帮助文件中,为什么不发布答案?
  • 只是一个建议:for %%a in (pc cmd menu kill) do if /I %c%==%%a exit。一行代码。
  • @AChildofGod,它不是一个数组。它只是一个字符串。批处理文件中没有数组类型变量。不过可以模拟。
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2023-03-20
  • 2022-01-11
  • 2021-01-21
相关资源
最近更新 更多