批量倒计时器不清除其余输出?

Lon*_*ala 4 batch-file

我正在尝试创建一个批处理计时器,该计时器不会清除其上方的输出。

我创建了一个计时器函数,但我希望对其进行改进,以便我仍然可以查看其上方的输出,而无需在输出中出现倒计时行。我当前的功能是:

@echo off
echo KEEP THIS OUTPUT
CALL :timer 10
rem Do more things...
EXIT

:Timer
set time=%~1

:loop
cls

echo Countdown - [%time%]

set /a time=%time%-1
if %time%==0 goto timesup

ping localhost -n 2 > nul
goto loop

:timesup
echo Timer completed!!
EXIT /B 0
Run Code Online (Sandbox Code Playgroud)

目前,计时器会清除屏幕,但我想这样做,以便保留该计时器上方的输出。

例如,在 10 秒时,输出应为:

KEEP THIS OUTPUT
Countdown - [10]
Run Code Online (Sandbox Code Playgroud)

然后输出应更改为:

KEEP THIS OUTPUT
Countdown - [9]
Run Code Online (Sandbox Code Playgroud)

输出不应该是:

KEEP THIS OUTPUT
Countdown - [10]
Countdown - [9]
Run Code Online (Sandbox Code Playgroud)

并且不应该是:

Countdown - [9]
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

jeb*_*jeb 5

可以使用特殊字符、回车符或退格键来完成。

回车将光标移回行首。
但要与文本在同一行Countdown,您不能使用该echo命令,因为它总是附加换行符。
相反,我使用该set /p命令来避免这种情况。

@Echo off 
setlocal EnableDelayedExpansion
for /F %%# in ('copy /Z "%~dpf0" NUL') do set "CR=%%#"

for /L %%n in (10 -1 0) do (
    <nul set /p ".=Countdown[%%n] !CR!"
    ping localhost -n 2 > nul
)
Run Code Online (Sandbox Code Playgroud)