9

有什么办法可以CLS输出单行吗?我不相信有任何开关CLS,所以也许更好的问题是:

有没有办法

  1. 保留所有以前的输出以供重复使用?
    或者
  2. 捕获当前显示的输出(就像您可以通过标记和复制一样)?

我只是想通过实时反馈/信息来使我的脚本对用户更加友好,而不是多行稍作改动。不过,我能想到的唯一方法是这样的:

@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会擦除​​所有输出。

有人有想法么?

4

4 回答 4

16

如果您只需要在一行中移动光标(如您的示例),
则可以使用回车符。

@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
)
于 2013-03-05T16:31:55.567 回答
4

尝试 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 _ _

于 2012-08-15T15:29:05.460 回答
4

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

您将需要一个 3rd 方实用程序。

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

浏览这两个线程,您会发现许多您可能会觉得有用的实用程序。

于 2012-08-15T16:00:36.170 回答
0

通过以下方式移动光标的另一种快速和肮脏的方法TIMEOUT

@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

于 2020-05-11T12:49:40.570 回答