cmd.exe:将 stdout 和 stderr 重定向到一个文件后,它仍然向控制台打印行 window

cmd.exe: After redirecting stdout and stderr to a file, it still prints lines to the console window

我在Windows10中执行了cmd.exe下的.bat文件,并将标准输出和标准错误重定向到一个文件:

C:\MyFolder> Foo.bat 2>&1 1>x.txt

但它仍然会向控制台打印一些行 window,并且这些行不会写入文件。

stdout (1) 和 stderr (2) 重定向到同一个文件的正确方法是在 this 中重定向它们确切顺序

C:\MyFolder> Foo.bat 1>x.txt 2>&1

这适用于 Windows cmd.exe,也适用于 Linux bash shell.

在您的版本中(顺序错误)stderr 未重定向到文件,而是在控制台中打印 window。所以很可能出现在控制台 window 中的行被打印到 stderr.

程序(可能由 Foo.bat 调用)绕过该文件的另一种方法是使用 Console Handle CONOUT$ 直接写入控制台的活动屏幕缓冲区。这无法重定向到文件。