Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CLS(清除)一条线路?_Batch File_Console_Cmd - Fatal编程技术网

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