当我正在进行小批量游戏时,我想到了实现“自动对话”功能。这是:
: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
但它仍会显示默认消息。有谁知道怎么摆脱它们?
答案 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
次。