将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>&1
在1>
重定向之后指定,否则它将不起作用。
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