如何在Windows命令提示符中运行命令行应用程序,同时显示输出并将输出重定向到文件?
例如,如果我要运行命令dir > test.txt,这将把输出重定向到一个名为test.txt的文件,而不显示结果。
我如何写一个命令来显示输出并将输出重定向到Windows命令提示符中的文件,类似于Unix上的tee命令?
如何在Windows命令提示符中运行命令行应用程序,同时显示输出并将输出重定向到文件?
例如,如果我要运行命令dir > test.txt,这将把输出重定向到一个名为test.txt的文件,而不显示结果。
我如何写一个命令来显示输出并将输出重定向到Windows命令提示符中的文件,类似于Unix上的tee命令?
当前回答
我想对撒克逊德鲁斯的精彩回答进行一点扩展。
如上所述,您可以重定向当前目录中的可执行文件的输出,如下所示:
powershell ".\something.exe | tee test.txt"
但是,这只将stdout记录到test.txt。它也不记录stderr。
最明显的解决方法是使用如下内容:
powershell ".\something.exe 2>&1 | tee test.txt"
然而,这并不适用于所有的前任。一些东西。前任们会把2>&1解释为争吵而失败。正确的解决方案是在something.exe及其开关和参数周围只使用撇号,如下所示:
powershell ".\something.exe --switch1 --switch2 … arg1 arg2 …" 2^>^&1 ^| tee test.txt
但是请注意,在这种情况下,您必须转义特殊的cmd-shell字符“>&|”,每个字符都有一个“^”,这样它们只能由powershell解释。
其他回答
不幸的是,没有这样的东西。
Windows控制台应用程序只有一个输出句柄。(嗯,有两个STDOUT, STDERR,但在这里不重要)>重定向输出通常写入控制台句柄到文件句柄。
如果你想要有某种多路复用,你必须使用一个外部应用程序,你可以将输出转移到它。然后,该应用程序可以再次写入文件和控制台。
如果你想在屏幕上真正看到一些东西,下面的步骤会有所帮助——即使批处理文件被重定向到一个文件。如果重定向到一个文件,也可以使用设备CON
例子:
ECHO first line on normal stdout. maybe redirected
ECHO second line on normal stdout again. maybe redirected
ECHO third line is to ask the user. not redirected >CON
ECHO fourth line on normal stdout again. maybe redirected
另请参阅良好的重定向说明:http://www.p-dd.com/chapter7-page14.html
为了扩展davor的答案,你可以像这样使用PowerShell:
powershell "dir | tee test.txt"
如果你试图重定向当前目录下的exe的输出,你需要在文件名上使用。\,例如:
powershell ".\something.exe | tee test.txt"
就像unix一样。
目录 |茶A.txt
在windows XP上,它需要安装mksnt。
它显示在提示符上,并附加到文件中。
Mtee是一个小型实用程序,它非常适合这个目的。它是免费的,源代码是开放的,而且很好用。
你可以在http://www.commandline.co.uk上找到它。
在批处理文件中用于显示输出并同时创建日志文件,语法如下所示:
someprocess | mtee /+ mylogfile.txt
其中/+表示附加输出。
当然,这假设您已经将mtee复制到PATH中的文件夹中。