如何在没有批处理消息的情况下设置超时/暂停命令?

时间:2017-06-29 21:05:29

标签: batch-file

当我正在进行小批量游戏时,我想到了实现“自动对话”功能。这是:

:Background_Work
SET /p Auto_Text=Would you like to have auto dialog on or off (y/n)?
IF '%Auto_Text%'=='y' GOTO Auto_Yes
IF '%Auto_Text%'=='n' GOTO Auto_No
:Auto_Yes
SET TMode=TIMEOUT /t 7 /nobreak
GOTO Speech_Start
:Auto_No
SET TMode=PAUSE
GOTO Speech_Start

以下是“自动对话框”功能后发生的事情:

:Speech_Start
ECHO Hello, my name is ZERO.
%TMode%

一切正常,如果我输入“y”,那么它将在“:Speech_Start”下显示部分:

  

您好,我的名字是ZERO。

     

等待7秒,按CTRL + C退出...

如果我输入“n”,那么它将显示为:

  

您好,我的名字是ZERO。

     

按任意键继续。 。

我遇到的问题是,我无法解决TIMEOUT和PAUSE消息。我尝试将“自动对话框”功能更改为:

:Background_Work
SET /p Auto_Text=Would you like to have auto dialog on or off (y/n)?
IF '%Auto_Text%'=='y' GOTO Auto_Yes
IF '%Auto_Text%'=='n' GOTO Auto_No
:Auto_Yes
SET TMode=TIMEOUT /t 7 /nobreak > NUL
GOTO Speech_Start
:Auto_No
SET TMode=PAUSE > NUL
GOTO Speech_Start

但它仍会显示默认消息。有谁知道怎么摆脱它们?

1 个答案:

答案 0 :(得分:1)

正如@Magoo所说,在您的第二个代码段中,有两个与timeout重定向相关的问题。

SET TMode=TIMEOUT /t 7 /nobreak > NUL
SET TMode=PAUSE > NUL

在这种情况下,> NUL用于将set提示重定向到nul,并且不是命令的一部分。现在,批处理文件将TMode视为:

TIMEOUT /t 7 /nobreak

PAUSE > NUL

解决方案A: 由@Magoo推荐

set "TMode=timeout /t 7 /nobreak ^> nul"

此解决方案转义>字符,使> nul成为变量的一部分,而不是重定向运算符。

解决方案B:@PualH建议

%TMode% > nul

很简单;只需将命令输出重定向到nul。请注意有一个骗局:

  • 如果要使用其中多个命令,则需要多次重复> nul次。