蝙蝠将stderr重定向到stdout有奇怪的行为

时间:2010-02-04 08:20:09

标签: batch-file stdout redirect stderr

我有一个bat脚本,它一度将进程的stderr重定向到stdout,然后将其写入文件。我曾经这样做过:

process.exe 2>&1 > file.txt

但是,这并没有将stderr重定向到文件(出于我无法理解的原因)。当我将该行修改为:

process.exe > file.txt 2>&1 

整件事情奏效了。这两个不等同吗?

3 个答案:

答案 0 :(得分:8)

第一个例子基本上是:

stderr = stdout;
stdout = "file.txt";

因此,stderr仍然指向原始的stdout。你的第二个例子是:

stdout = "file.txt";
stderr = stdout;

因此,stderrstdout现在都引用了file.txt。这令人讨厌地微妙。

答案 1 :(得分:2)

重定向2>&1在命令行的末尾起作用。它不能作为第一个重定向参数,重定向需要文件名,最后需要2>&1。您正在尝试重定向stderr,但没有占位符来存储stderr消息,因此失败了。记住这个的快捷方式是

executable  > some_file 2>&1

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:1)

顺便说一句,由于我不完全理解的原因,想像

process.exe > result.txt 2<&1 

似乎也有效