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,并且这些行不会写入文件。
- 这怎么可能?这些行在什么输出上,打印到控制台 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$
直接写入控制台的活动屏幕缓冲区。这无法重定向到文件。
我在Windows10中执行了cmd.exe下的.bat文件,并将标准输出和标准错误重定向到一个文件:
C:\MyFolder> Foo.bat 2>&1 1>x.txt
但它仍然会向控制台打印一些行 window,并且这些行不会写入文件。
- 这怎么可能?这些行在什么输出上,打印到控制台 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$
直接写入控制台的活动屏幕缓冲区。这无法重定向到文件。