批处理 SET /P 命令“?” "was unexpected at this time" 崩溃

In batch SET /P command "?" crashes with "was unexpected at this time"

听起来我不能输入“?”在批处理 (.bat) 脚本提示中:

set /p AREYOUSURE= Are you sure (Y/[N]) ?

它崩溃并显示消息:

? was unexpected at this time.

但是,没有 ""

也能正常工作

注意:我是 运行 Windows 7 64 位。

这不是因为问号,而是因为右括号。您正在块中使用此语句,例如

if foo (
  set /p AREYOUSURE= Are you sure (Y/[N]) ?
)

右括号关闭块,然后让解析器在第一个字符块之后绊倒。

您可以转义右括号:

set /p AREYOUSURE= Are you sure (Y/[N]^) ?

或者只使用引号,无论如何我总是推荐:

set /p "AREYOUSURE=Are you sure (Y/[N])?"

对于此类问题,我个人会使用 choice,但是:

choice /m "Are you sure"

不过,您不能只按 return 那样进行默认选择。