如何以编程方式捕获Windows上的命令输出

时间:2010-08-11 16:02:25

标签: windows cmd prompt text-files

问题是什么。

最终我想要的是执行gcc和capture the output if there's an error。问题是错误被写入stderr而不是stdout。在Linux上我可以做到

gcc foo.c 2>&1

如何在Windows上完成此操作?

3 个答案:

答案 0 :(得分:5)

有。只需右键单击控制台窗口,选择Mark即可。用鼠标选择所需区域并右键单击。现在,您可以使用Ctrl-V将其粘贴到文本文件中。

如果您需要将程序输出到文本文件中,请按以下方式运行:

myprogram.exe > myfile.txt

请参阅此处有关重定向的信息:
1. Using command redirection operators
2. Redirecting Error Messages from Command Prompt: STDERR/STDOUT

你可以这样做:D:\>dir 1> test.txt 2> testerr.txt

答案 1 :(得分:4)

理查德,你的“接受的答案”太长了,而且太错了。

您问题的简短回答(正如您在上一句话中所述:“我如何在Windows上完成此操作?”)是:

就像你在Linux上做的那样!



但我 给你一个很长的答案。

您的2>&1重定向以相同的方式在cmd.exe窗口中运行。我甚至现在重新测试它,因为我的cmd.exe经验有点生疏。我使用了这个Ghostscript命令(故意用于在stdout和stderr上产生输出):

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf

我将所有预期的输出都输入到shell窗口中。然后我做了:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>stdout.log

并且stderr仍然打印在窗口中,但是stdout.log有“缺失”的原始输出。接下来我做了:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          2>stderr.log

和stdout现在打印到窗口中,而stderr.log则有剩下的Ghostscript消息。下一个:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>stdout.log 2>stderr.log

和(正如预期的那样):窗口中没有输出,所有输出在stdout.log和stderr.log之间划分。最后一次测试:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>all.log 2>&1

现在结果:

  1. 窗口中没有任何内容,
  2. all in all .log。
  3. 与stderr / stdout重定向的行为与在Linux上的行为相同。

答案 2 :(得分:0)

如果您想要输出特定的命令,可以通过一种简单的方法将控制台输出推送到文件。

这是使用'dir'命令的一个简单示例(前导>表示您的提示):

>dir > diroutput.txt