我正在尝试将 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.
是否可以,还是应该仅重定向到两个单独的文件?
Anders Lindahl 的答案是正确的,但应注意的是,如果要将 stdout 重定向到文件并且也要重定向 stderr,则必须确保在1>
重定向之后指定2>&1
,否则它将不起作用。
REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt
虽然接受这个问题的答案是正确的,它确实没有做太多解释为什么它的工作原理,以及因为语法不立即清除我做了一个快速谷歌,以找出究竟是怎么回事。希望这些信息对其他人有帮助,我将其发布在这里。
从命令提示符重定向错误消息: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