当我输入带空格的输入时,批处理 cmd 退出

Posted

技术标签:

【中文标题】当我输入带空格的输入时,批处理 cmd 退出【英文标题】:batch cmd exits as I enter the input with space 【发布时间】:2021-09-04 03:48:02 【问题描述】:

我正在为用户界面编写一个批处理脚本,您可以在其中输入数字 1 - 10。它非常类似于这个示例:

@echo 关闭 :问 分类 回声按 1 进行测试 1 回声按 2 进行 test2 设置 /p 输入= 如果 %input% == 1 转到 test1 如果 %input% == 2 转到 test2 如果 %input% GTR 10 去询问 去问 :测试1 关掉 :测试2 净视图 暂停 去问

我有 if %input% GTR 10 goto ask,最后 goto ask in global 因为如果有人键入不同的内容,它将回到问题。 当我输入不同的内容时,为什么它会让我退出终端?

【问题讨论】:

只处理您需要的案例,其他一切发送至ask。目前,任何字母或未覆盖的数字 (3-9) 都只会执行代码,直到到达脚本末尾,因为没有任何“ifs”适用。此外,您需要指定一个有效的结束标记。目前您的输入 1 将执行 :test1,但也将执行 test2。一旦你想要的代码部分被执行,你应该添加goto :eof 我如何发送所有其他问题,这是我的问题 删除 echo off 并再次运行它 - 从打开的命令行窗口。你应该看看,有什么问题,很明显。 【参考方案1】:

如果您输入带有空格的字符串,if 语法会给您一个语法错误。我们来看看:

if hello world == string echo xyz

if 语法为:if <value1> <comparator> <value2> command 所以hello 是 value1,world 是比较器 - 等等 - 什么? world 不是比较器 - 语法错误。

将您的值括在引号中以确保安全:

if "hello world" == "string" echo xyz

所以"hello world" 是 value1,== 是比较器,"string" 是 value2,echo xyz 是命令。一切顺利。

您可能对choice 命令感兴趣,它自己处理错误并且只允许有效的键。

【讨论】:

谢谢,但这不是问题,我需要一个类似于 if not 的命令,但需要多个运算符 你确定吗?当您使用gotoifed 所有有效选择时,无需再次检查not a valid choice。所有有效的选择都会被处理,所以它必须是一个无效的条目,只有一个无条件的goto :ask会处理它。 是的,任何东西都会被拒绝询问,但是,如果我输入包含空格的内容,提示就会退出。 我告诉过你,为什么会发生这种情况以及如何避免它。如果它仍然“崩溃”,请从打开的命令行窗口运行它,并且不使用 echo off 进行调试。 即使没有echo off 它仍然会发生

以上是关于当我输入带空格的输入时,批处理 cmd 退出的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 GLFW 处理输入

从 hta 批处理文件运行 CMD 命令?

win 7 cmd命令窗口 一弹出来就自动关闭 急求方法解决

使用 CreateProcess 运行带空格的 bat

c语言如何输出有空格的字符串