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