windows cmd:为什么指定输出重定向的顺序很重要?

windows cmd:为什么指定输出重定向的顺序很重要?,windows,cmd,io-redirection,Windows,Cmd,Io Redirection,如果你这样做 ipconfig.exe 1> output.log 2>&1 这将把所有输出(stdout和stderr)定向到“output.log” 但是,如果您这样做(更改指定所需重定向的顺序) 这不会达到将两个输出流打印到“output.log”的预期效果,因为在这种情况下,“stderr”将打印到控制台 我怀疑这与“cmd”解析命令的方式有关,这些命令根据指定重定向的顺序赋予不同的含义 如果是,语义规则是什么,它们在哪里被记录 我认为这是一个值得研究的问题,因为它

如果你这样做

ipconfig.exe 1> output.log 2>&1
这将把所有输出(stdout和stderr)定向到“output.log”

但是,如果您这样做(更改指定所需重定向的顺序)

这不会达到将两个输出流打印到“output.log”的预期效果,因为在这种情况下,“stderr”将打印到控制台

我怀疑这与“cmd”解析命令的方式有关,这些命令根据指定重定向的顺序赋予不同的含义

如果是,语义规则是什么,它们在哪里被记录


我认为这是一个值得研究的问题,因为它会让人们挠头,试图找出重定向不起作用的原因,从而浪费时间。

重定向只是从左到右解析的。最初
stdout
stderr
都指向控制台,因此当您将
stderr
重定向到第二个示例中当前
stdout
指向的位置时,您将
stderr
指向控制台。然后将
stdout
重定向到一个文件


这些解释和示例非常好,可供进一步参考。

重定向只是从左到右进行解析。最初,stdout和stderr指向控制台,因此当您将stderr重定向到第二个示例中stdout当前指向的位置时,您将stderr指向控制台。然后将stdout重定向到一个文件。啊,这就解释了。谢谢你,马克。@MarkSetchell-你能把答案贴出来吗?我现在正在发布您的邮件,但在您发布邮件时会将其删除。:)我的道歉——这一条从网上溜走了,我现在已经发布了一个答案,再加上一点参考。
ipconfig.exe 2>&1 1> output.log