Windows:命令行重定向到文本文件,同时也看到输出


30

我正在Windows中编写C程序,我的printf调用print到命令行,并且我知道可以使用以下命令将所有这些输出重定向到文本文件:

myProgram.exe > mylog.txt

但是,我也希望看到将输出到控制台的输出,并将所有输出记录在文本文件中。

有没有办法做到这一点?我当时正在考虑使用tail来监视日志文件。


有时我做的是打开另一个cmd提示符窗口,然后反复执行键入mylog.txt(或可以执行记事本mylog.txt)并查看其发展情况。T恤看起来很棒。
barlop 2011年


Answers:


19

Windows PowerShell具有可以执行此操作的工具,tee该工具以具有相同功能的unix工具命名。

另外,还有tee用于Windows 的Unix端口:


3
powershell是一个很棒的技巧,可以将cmd仅用于尚未开始的人!使用gnuwin32比使用unxutils更好,unxutils相当老。gnuwin32是较新的,可能在unxutils中也包含所有内容,并且具有更多实用程序。如其他地方提到的,的GnuWin32的coreutils具有三通
barlop

同样适用于另一个第三方命令行实用程序CMDer。
拉尼(Rauni)

1
在此答案中,superuser.com / a / 273112/213743 BaconBits指出,PowerShell Tee是面向行的:遇到“换行符”之前,它不会输出一行。BaconBits建议Unix T恤始终立即转发内容。
buzz3791

8

在Windows下,我能想到的就是:

myProgram.exe > mylog.txt & type mylog.txt

这是基于您问题中的命令示例的-如果实际上您想将输出附加到,mylog.txt那么您想使用>>而不是>,但是type会打印出整个日志文件,而不仅仅是打印附加的内容。

如果下载了GnuWin32 CoreUtils,则可以使用Unix方法(tee命令)执行此操作:

myProgram.exe | tee mylog.txt

这会将myProgram.exe的输出写入到,mylog.txt但同时将其显示到控制台。如果只想附加到,mylog.txt则可以将-a参数传递给tee。


2
T恤解决方案看起来要好得多。您提到的另一件事不是同时发生的。
barlop 2011年

1
@barlop-我同意,第一个解决方案是一种变通办法,因为您不能在Windows中本机执行。T恤在这里很好地完成了技巧:)
加夫(Gaff)

感谢您的帮助,同意使用tee,但是当
lesmana

如果省略“类型”,它将在任务完成时在默认编辑器(对我而言是记事本)中打开文件。
乔什(Josh Stribling)2015年


0

我只是有类似的需求,并使用OP的Tail来建议他们:

>C:\Temp\Commands_Log.txt (
START tail.exe -f C:\Temp\Commands_Log.txt

Some_Commands
Other_Commands

echo.
echo ALL DONE HERE!
echo.
echo IT IS NOW SAFE TO CLOSE THIS WINDOW!
)

“> C:\ Temp \ Commands_Log.txt”创建日志文件,并添加位于(括号内)的所有命令的输出。

括号内的第一个命令应该是启动Tail,它将在新的命令窗口中打开。

最后的回显是供不熟悉的用户在完成所有操作后告知他们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.