将Windows cmd stdout和stderr重定向到单个文件

我试图将DOS命令的所有输出(stdout + stderr)重定向到单个文件:

C:>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.

是否有可能,或者我应该重定向到两个单独的文件?


你要:

dir > a.txt 2>&1

语法2>&1会将2 (stderr)重定向到1 (stdout)。 您也可以通过重定向到NUL隐藏邮件,更多解释和MSDN上的示例。


Anders Lindahl的回答是正确的,但应该注意的是,如果你将stdout重定向到一个文件并且想重定向stderr,那么你必须确保2>&11>重定向之后指定,否则它将不起作用。

REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt

正确的方法: dir > a.txt 2>&1 。 要追加,请使用>>


来自MSKB的背景信息

尽管对这个问题的接受答案是正确的,但解释它为什么会起作用并没有多大作用,而且由于语法并不是很清楚,我做了一个快速的谷歌来找出实际发生的事情。 希望这些信息对其他人有所帮助,我将在此发布。

取自MS Support KB 110930。


来自MSKB110930

重定向来自命令提示符的错误消息:STDERR / STDOUT

概要

使用'>'符号重定向应用程序的输出时,错误消息仍会打印到屏幕上。 这是因为错误消息通常发送到标准错误流而不是标准输出流。

控制台(命令提示符)应用程序或命令的输出通常发送到两个单独的流。 常规输出发送到标准输出(STDOUT),并将错误消息发送到标准错误(STDERR)。 当您使用“>”符号重定向控制台输出时,您只是重定向STDOUT。 为了重定向STDERR,你必须为重定向符号指定'2>'。 这将选择STDERR的第二个输出流。

命令dir file.xxx (其中file.xxx不存在)将显示以下输出:

Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876

File Not Found

如果使用dir file.xxx > nul将输出重定向到NUL设备,则仍会看到输出的错误消息部分,如下所示:

File Not Found

要将(仅)错误消息重定向到NUL ,请使用以下命令:

dir file.xxx 2> nul

或者,您可以将输出重定向到一个地方,并将错误重定向到另一个地方。

dir file.xxx > output.msg 2> output.err

您可以使用“&1”命令将错误和标准输出打印到单个文件,以将STDERR的输出重定向到STDOUT,然后将输出从STDOUT发送到文件:

dir file.xxx 1> output.msg 2>&1
链接地址: http://www.djcxy.com/p/16439.html

上一篇: Redirect Windows cmd stdout and stderr to a single file

下一篇: Windows equivalent to UNIX pwd