5

我正在使用 Microsoft 命令行实用程序来执行任务。我认为,该实用程序的功能和执行的任务的具体细节相对不重要。这很重要:

命令行实用程序将文本发送到控制台窗口。尽管我已经尝试了通过研究找到的所有方法,但我无法弄清楚如何将此文本重定向到文件。该实用程序似乎正在使用一些奇怪的操作系统函数调用,导致以不受正常重定向方式影响的方式打印文本。我正在使用 Windows 7 cmd.exe 控制台窗口。

这些构造都没有重定向有问题的文本输出:

util.exe >log.txt
util.exe 2>err.txt
util.exe >log.txt 2>&1
util.exe 1>log.txt 2>err.txt
util.exe 1>log.txt 2>err.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt

对最后一个感到困惑? 原来在 Windows-land 中有 10 个输出流,但这也没有完成工作。

我可以使用控制台窗口的编辑>标记选择和复制功能复制文本,但我需要以无头方式捕获该程序的输出,以便它可以自动化。

我找不到任何专门绕过重定向打印到控制台的操作系统函数调用。有这样的功能吗?该实用程序如何设法规避重定向?我可以使用什么方法来捕获该实用程序的输出?

我也尝试了 DbgView,认为它可能包含输出消息,但它没有。

该实用程序不是图形实用程序。它很明显是一个文本模式程序,可能是用 C 或 C++ 编写的。它是由微软编写的。

4

1 回答 1

1

它没有什么特别神奇的地方。尽管 C 库默认将输出发送到标准输出句柄,但程序没有义务这样做;您可以随时打开自己的控制台输出设备 ( CONOUT$) 句柄。

CreateFile有关控制台设备的更多信息,请参阅文档。

在捕获输出方面,您也许可以ReadConsoleOutput和朋友一起做一些事情,但这并不简单。

于 2013-11-11T22:17:53.873 回答