【问题标题】:batch cmd exits as I enter the input with space当我输入带空格的输入时,批处理 cmd 退出
【发布时间】: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 并再次运行它 - 从打开的命令行窗口。你应该看看,有什么问题,很明显。

标签: batch-file


【解决方案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 它仍然会发生
猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
相关资源
最近更新 更多