无法在Windows命令提示符(cmd.exe)中重定向输出消息

时间:2011-11-03 06:01:33

标签: windows cmd io-redirection

我尝试在Windows命令提示符下运行以下命令。

abc.exe >log.txt 2>&1

我希望abc.exe的所有输出都定向到log.txt,但它不起作用,因为log.txt为空。

但是,如果我只执行abc.exe,则输出会在Windows命令提示符下显示。

我不确定这个应用程序使用的输出处理程序是什么(STDOUT或STDERR),但我想知道是否有办法捕获所有消息而不管处理程序。

2 个答案:

答案 0 :(得分:1)

附录:自Windows 10 v1809起,Windows finally supports pseudoconsoles。如果可用,这提供了比使用传统控制台API更好的解决方案。


如果您确实需要捕获该消息,请使用console API

CreateConsoleScreenBufferSetConsoleActiveScreenBuffer允许您切换到专用屏幕缓冲区,以避免干扰现有屏幕缓冲区。

SetConsoleScreenBufferSize可以使缓冲区足够宽以避免行翻转。

SetConsoleCursorPosition可以根据需要设置光标位置。

运行程序后,ReadConsoleOutput允许您读取它写入控制台的内容。

然后,您可以使用GetStdHandle(STD_OUTPUT_HANDLE)SetConsoleActiveScreenBuffer将控制台返回到原始缓冲区,并使用CloseHandle关闭额外的缓冲区。

答案 1 :(得分:0)

重定向到文件时控制台输出不可见的症状可能是由于程序中缺少flush()写入标准输出。但是,当程序退出(正常)或相应的缓冲区填满并自动刷新时,输出应该是可见的。