如何在Windows命令提示符下运行命令行应用程序,并同时显示输出和重定向到文件?
例如,如果我运行命令dir > test.txt
,这会将输出重定向到一个名为test.txt
的文件,而不显示结果。
我怎么能写一个命令显示输出和输出重定向到在Windows命令提示符下一个文件,类似于tee
上的Unix命令?
#1楼
如果您希望在屏幕上真正看到某些内容,即使将批处理文件重定向到文件,也可以使用以下帮助。 如果将设备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
#2楼
我能够找到将输出重定向到文件然后重定向到控制台的解决方案/解决方法:
dir > a.txt | type a.txt
其中dir是需要重定向输出的命令, a.txt是存储输出的文件。
#3楼
检查一下: wintee
不需要cygwin。
我确实遇到并报告了一些问题。
另外,您可能会检查unxutils,因为它包含tee(不需要cygwin),但是请注意,此处输出的EOL与UNIX类似。
最后但并非最不重要的一点是,如果您具有PowerShell,则可以尝试使用Tee-Object。 在PowerShell控制台中键入get-help tee-object
以获得更多信息。
#4楼
这是实时的,但也很丑陋,性能很慢。 没有经过良好测试:
@echo off
cls
SET MYCOMMAND=dir /B
ECHO File called 'test.bat' > out.txt
for /f "usebackq delims=" %%I in (`%MYCOMMAND%`) do (
ECHO %%I
ECHO %%I >> out.txt
)
pause
#5楼
另一种方法是在程序中将stdout发送到stderr:
在Java中:
System.setOut(new PrintStream(new TeeOutputStream(System.out, System.err)));
然后,在您的dos批处理文件中: java program > log.txt
stdout将转到日志文件,并且stderr(相同数据)将显示在控制台上。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3175532