【问题标题】:CLS (clear) a single line?CLS(清除)单行?
【发布时间】:2012-08-11 22:07:58
【问题描述】:

有没有办法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 会擦除 all 输出,而我只想通过擦除并重新输出来刷新一行。

有人有什么想法吗?

【问题讨论】:

标签: batch-file console cmd


【解决方案1】:

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

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

【讨论】:

  • 我已经尝试过了,但最后的文本部分仍然存在。这是一个 gif 来显示我得到的结果。在最新版本的 Windows 上。 i.imgur.com/3aR3JwM.gif
  • @Ste 你需要在秒后添加一些空格,比如...close in %%n seconds !CR!"
  • 谢谢杰布。我应该知道的。
【解决方案2】:

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

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

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

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

【讨论】:

  • 所以没有命令行版本的标记和复制或类似的东西?或者除我的方法之外的任何刷新一行的方法? ://
  • 没有本地方法,但是您可以按照我的建议下载实用程序并将光标移动到屏幕上的任何位置。此时您可以覆盖已经存在的内容。
  • 好的,谢谢。我会仔细查看两个答案,然后选择一个答案。 :)
【解决方案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

【讨论】:

  • ANSI 序列在旧的 DOS 机器上可以正常工作,但不能在 Windows 命令行下工作。我想念那个功能:(
  • 好的,谢谢。我会仔细查看两个答案,然后选择一个答案。 :)
  • 它可以在windows 10工作
【解决方案4】:

moving the cursor 通过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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2014-12-06
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多