MSDN和this question给出了将Windows cmd stdout和stderr重定向到单个文件的示例:
dir file.xxx 1> output.msg 2>&1
当STDERR和STDOUT通过管道传递到另一个程序时,我正在寻求相同的操作。这是没有STDERR重定向的用法:
net use Z: \\server\share | TimeStampPipe.exe >> logfile.txt
我希望将“ net use”的STDERR和STDOUT用管道传输到TimeStampPipe.exe。我不在乎TimeStampPipe.exe中的STDERR。 2>&1哪里指示适用于网络使用而不适用于TimeStampPipe.exe?我尝试过此
net use Z: \\server\share 1> 2>&1 TimeStampPipe.exe >> logfile.txt
并获得2>&1 was unexpected at this time.
我尝试过此
net use Z: \\server\share 1| 2|&1 TimeStampPipe.exe >> logfile.txt
并获得& was unexpected at this time.
配管时有办法吗?我可以尝试类似的东西:
net use Z: \\server\share 1> tempfile.txt 2>&1
type tempfile.txt | TimeStampPipe.exe >> logfile.txt
del tempfile.txt
是否有更简洁的方法?
编辑:我尝试了@compo的建议以单独使用2>&1
。我尝试了以下三种形式:
net use Z: \\server\share | 2>&1 TimeStampPipe.exe >> logfile.txt
net use Z: \\server\share | TimeStampPipe.exe 2>&1 >> logfile.txt
net use Z: \\server\share | TimeStampPipe.exe >> logfile.txt 2>&1
在每种情况下,都正确地输出了stdout,但是任何来自网络使用的stderr输出都流向了屏幕,而不是通过管道。
正如其他人已经在评论中指出的那样,您必须这样做: