CLS(清除)单行?

时间:2012-08-15 15:24:40

标签: batch-file console cmd

CLS单行输出吗?我不相信CLS有任何转换,所以也许更好的问题是:

有没有办法

  1. 保留以前的所有输出以供重复使用?
  2. 捕获当前显示的输出(就像你可以通过标记和复制一样)?
  3. 我只是想通过提供实时反馈/信息来使我的脚本更加用户友好,而不是通过轻微更改的多行。但是,我能想到的唯一方法就是这样:

    @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
        )
    

    所以,你得到了这个:

    enter image description here

    但问题是CLS删除了所有输出,当我只想通过擦除并重新输出它来刷新一行时。

    有人有什么想法吗?

4 个答案:

答案 0 :(得分:15)

如果您只需要将光标移动到一行(如您的样本),则 它可以带回车字符。

@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
)

答案 1 :(得分:3)

尝试ANSI序列:http://www.robvanderwoude.com/ansi.php

挖掘链接,http://batch.xoo.it/t2238-BG-exe-Utility-for-Batch-Games.htm看起来最有希望。

这个页面听起来像是有关控制/设置控制台大小(以及其他显示和缓冲区大小设置)的有用讨论。 http://www.pcreview.co.uk/forums/change-buffer-size-console-window-can-runas-inherit-console-props-t1468842.html

答案 2 :(得分:3)

不幸的是,没有本机命令或实用程序可以在Windows命令行控制台中重新定位光标。

您需要第三方实用程序。

Aacini在DOSTips上发布了一个免费的CursorPos.exe实用程序。 CurorPos.exe "source"以十六进制数字给出。要使用来源,您需要HexToBin.bat "compiler"

浏览两个线程,您会发现许多有用的实用程序。

答案 3 :(得分:0)

通过moving the cursorTIMEOUT的另一种快捷方法:

@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