Batch file CLS(清除)一条线路?
有没有办法Batch file CLS(清除)一条线路?,batch-file,console,cmd,Batch File,Console,Cmd,有没有办法CLS一行输出?我不相信有任何开关用于CLS,所以也许更好的问题是: 有没有办法去 是否保留所有以前的输出以供重复使用 或 捕获当前显示的输出(就像您可以通过标记和复制一样) 我只是想通过提供实时反馈/信息来让我的脚本更友好一些,而不是只需稍加修改就可以使用多行代码。不过,我能想到的唯一办法是: @echo off goto Prep :Prep SET count=5 SET genericMessage=This window will close go
CLS
一行输出?我不相信有任何开关用于CLS
,所以也许更好的问题是:有没有办法去
或
@echo off
goto Prep
:Prep
SET count=5
SET genericMessage=This window will close
goto Output
:Output
IF NOT %count% == -1 (
cls
IF %count% == 0 (
echo %genericMessage% now.
) ELSE (
echo %genericMessage% in %count% seconds.
)
SET /A count=%count% - 1
ping localhost -n 2 >nul
goto Output
) ELSE (
exit
)
所以,你得到了这个:
不过,问题是CLS
擦除所有输出,而我只想通过擦除和重新输出刷新一行
有人有什么想法吗?试试ANSI序列:
挖掘链接,看起来是最有希望的
这个页面似乎有关于控制/设置控制台大小(以及其他显示和缓冲区大小设置)的有用讨论 不幸的是,没有本机命令或实用程序可以在Windows命令行控制台中重新定位光标 您将需要第三方实用程序 Aacini在DOSTips上发布了一个免费的CursorPos.exe实用程序。数字以十六进制数字表示。要使用源代码,您将需要
浏览这两个线程,您会发现许多实用程序可能很有用。如果您只需要在一行中移动光标(如示例),
可以使用回车符
@echo off
setlocal EnableDelayedExpansion
for /f %%a in ('copy /Z "%~f0" nul') do set "CR=%%a"
for /L %%n in (5 -1 1) do (
<nul set /P "=This window will close in %%n seconds!CR!"
ping -n 2 localhost > nul
)
@echo关闭
setlocal EnableDelayedExpansion
对于('copy/Z'%~f0“nul')中的/f%%a,请设置“CR=%%a”
对于(5-1)do中的/L%%n(
努尔
)
另一种快速肮脏的过孔方法:
@echo关闭
骗局
echo(我现在关闭…[将此替换为大量空格]
退出/b
ANSI序列在旧的DOS机器上运行良好,但不能与Windows命令行一起使用。我错过了该功能:(好的,谢谢。我将仔细查看两个答案,然后选择一个答案。)它将在中工作,因此没有标记和复制的命令行版本或类似的内容?或除我的方法之外的任何刷新一行的方法?:/没有本机方法,但您可以按照我的建议下载实用程序,并将光标移动到屏幕上的任何位置。此时,您可以覆盖已经存在的内容。好的,谢谢。我将仔细查看两个答案,然后选择一个答案。:)我已经试过了,但最后的一部分仍然保留。这里有一个gif显示我得到的结果。在最新版本的windows上@Ste您需要在秒后添加一些空格,如
…在%%n秒后关闭!CR!“
谢谢你,杰布。我应该知道的。
@echo off
<nul set/p"=5 seconds till i close..."
timeout /t 5 /nobreak >con
echo(i'm closing now...[REPLACE this with lots of spaces]
exit /b