如何在批处理语言中使用timeout命令?

4

我实际上想用批处理程序创建一个计时器,在运行代码时输出并不是我想要的样子。屏幕继续闪烁而不减少秒数。有人能帮帮我吗?非常感谢。

@echo off
set countdown=10
:loop
if %countdown% == 0 goto end
cls
echo %countdown% 
timeout /t 1 /NOBREAK
set/a count=%countdown%-1
goto loop
:end
cls
echo Time's up!
pause
2个回答

2

您应该将这一行 set/a count=%countdown%-1 替换为以下内容之一:set /a countdown=countdown-1 或者是缩写版的 set /a countdown-=1

@echo off
set "countdown=10"
:loop
if "%countdown%" EQU "0" goto end
cls
echo %countdown% 
set /a countdown-=1
timeout /t 1 /NOBREAK>nul
goto loop
:end
cls
echo Time's up!
pause

非常感谢,它正在工作。为什么它有这个符号“在set/a”倒计时=10”? - drw15h

1
一种不用goto/label的方法。
@echo off
Set count=10
Setlocal enableDelayedExpansion
For /L %%a in (1,1,!count!) DO (
    Set /a count=!count! - 1
    (ECHO <esc>[1;1H<esc>[K!count!)
    (
        TIMEOUT 1 >nul
    )
)

ECHO times up!    
pause

<esc>[1;1H<esc>[K 设置文本的位置(行;列),并从该点开始清除该行。 <esc> 代表 ANSI 转义字符。
使用 ANSI 光标定位允许您有选择地刷新屏幕上的文本,而无需清除整个屏幕。


1
只是提一下,您可能需要最新版本的Windows 10才能使用控制台虚拟终端序列。 - Compo
所有版本的Windows 10都支持ANSI序列。
  • 修改 - 经过审核,光标定位系统确实不是ANSI。
- T3RR0R
1
澄清一下,我的观点是OP没有指定他们的操作系统版本,只是说Windows,因此我认为值得提到的是,除非OP使用最新的操作系统,否则cmd.exe默认情况下将无法执行此操作。 - Compo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接