CLS(清除)单行?

myt*_*lon 8 console cmd batch-file

有没有办法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
    )
Run Code Online (Sandbox Code Playgroud)

所以,你得到这个:

在此输入图像描述

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

有人有主意吗?

jeb*_*jeb 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
)
Run Code Online (Sandbox Code Playgroud)

  • @Ste您需要在秒后添加一些空格,例如`...在 %%n 秒后关闭!CR!"` (2认同)

dbe*_*ham 4

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

您将需要第 3 方实用程序。

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

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