批处理文件 If 语句导致 CMD 关闭且不起作用

Posted

技术标签:

【中文标题】批处理文件 If 语句导致 CMD 关闭且不起作用【英文标题】:Batch File If Statements causing close of CMD and not working 【发布时间】:2021-04-30 17:36:34 【问题描述】:

我正在创建一个应该很简单的批处理文件,它允许我输入一个班级名称,它将带我到正确的谷歌教室。但是,即使我输入了“社会研究”这个词,我的 if 语句也不起作用。它不会带我去我的教室,最重要的是,CMD 刚刚关闭。当我删除 If 语句行时,代码工作正常,输入类后 cmd 保持打开状态。

    set /p class="Enter Class: "

    IF "%class%" /I EQU "Social Studies" (START https://clas-s-room.google.com) 
    
    cmd /k

【问题讨论】:

如果您打开命令提示符窗口,输入if /? 然后按[ENTER] 键,您将学习如何正确使用该命令。此外,当您比较字符串时,您应该使用== 而不是EQU。我也很想知道你为什么在最后调用一个新的、基本上是空的命令提示符。另请注意,Set /P 在使用之前需要对输入进行一些特定的验证,不能相信您的最终用户只输入预期的内容,无论是意外还是其他。 我很想知道您在哪里找到了 IF 命令的用法示例。 我刚才解决了这个问题,我忘了我是怎么做到的。 cmd/k 只是让它在完成后不会关闭。 【参考方案1】:
IF /I "%class%" EQU "Social Studies"...

if 语句的解析逻辑非常具体; if [/i][NOT] arg1 op arg2 其中/inot 是可选的,但必须如果使用,请按此顺序使用。

您的代码看到/i,它需要一个比较运算符并生成一个语法错误。

当您使用点击并傻笑的方法执行批处理时,如果发现语法错误,批处理窗口通常会关闭。您应该改为 open a 'command prompt' 并从那里运行您的批处理,以便窗口保持打开状态并显示任何错误消息。

【讨论】:

【参考方案2】:

您可以写掉@echo,以防止显示批处理文件的提示和内容。 我用 == 替换了你的 EQ,现在它可以工作了:

@echo off
set /p class="Enter Class: "

IF "%class%"=="Social Studies" (START https://clas-s-room.google.com)
PAUSE

最后的PAUSE 将使CMD在完成后保持打开状态

【讨论】:

为什么要删除/I 选项?

以上是关于批处理文件 If 语句导致 CMD 关闭且不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 if 语句后跟调用似乎在批处理文件中不起作用

fillOval() 在 if 语句中不起作用[关闭]

if/else 语句不起作用 C++ [关闭]

如果语句不起作用(左像素)jQuery [关闭]

运行批处理文件后如何关闭命令行窗口?

将变量保存到配置文件的 Bash if 语句不起作用