有没有办法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
)
Run Code Online (Sandbox Code Playgroud)
所以,你得到这个:

但问题是,当我只想通过擦除并重新输出它来刷新一行时,CLS擦除所有输出.
有人有主意吗?
我正在玩控制台应用程序,只是想知道.保存控制台窗口的当前缓冲区以供以后使用的最佳方法是什么,并提供一种历史导航功能.我知道Diagnostics命名空间提供了读取标准输出的能力,但只有当你重定向它时,所以基本上你必须在一个看起来有点愚蠢的新窗口中运行处理所有结果.
我有一个用C#编写的应用程序,它通过while(true)循环和Console.ReadLine连续获取用户的命令.
我也有各种后台操作,通过控制台报告.查看这个简单的例子:
class Program
{
static void Main(string[] args)
{
new Messager(1000 * 2.5f);
new Messager(1000 * 3);
while (true)
{
Console.ReadLine();
}
}
}
public class Messager
{
Timer Timer;
public Messager(double interval)
{
this.Timer = new Timer(interval);
this.Timer.Elapsed += (sender, e) =>
{
Console.WriteLine("message from " + this.Timer.Interval);
};
this.Timer.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我输入一个命令并且在按下Enter之前Messager报告回来时,来自Messager的消息将被附加到我当前的行,光标将被放入下一行.看这个截图:

正如你猜我不想那样.我希望当前输入的命令始终保持在最后一行,并将所有消息放在该行之上.正如您对此类应用程序的期望一样.我如何实现这一目标?