如何使Windows命令输出显示在控制台上并同时写入文件

时间:2017-07-12 23:43:37

标签: windows batch-file cmd

感谢您查看我的问题。

我有一个在jenkins windows batch命令提示符下运行的批处理命令。让我们来做一个简单的命令

echo hello world

我想将此命令输出写入文件以及此输出以在命令提示符下显示。我试过以下两种方式。

echo helloworld |tee -a .\test.log
echo hello world >>.\test.log >>CON

以上两种都不起作用。

任何人都可以帮我解决这个问题。

谢谢, R Dama。

4 个答案:

答案 0 :(得分:2)

纯批处理脚本中没有tee命令。

最简单的解决方法是重定向到一个文件,然后输入文件,就像这样(不要在echo命令后面输入 SPACE ,因为它也是输出的) :

echo Hello world!> "logfile.txt"
type "logfile.txt"

当然,只要命令(示例中为echo)完成执行,输出就会打印到控制台。

如果要附加到现有的日志文件logfile.txt,请改用:

echo Hello world!> "logfile.tmp"
type "logfile.tmp"
type "logfile.tmp" >> "logfile.txt"
del "logfile.tmp"

或者,如果logfile.txt确实存在,您可以使用:

echo Hello world!> "logfile.tmp"
type "logfile.tmp"
copy /Y "logfile.txt" + "logfile.tmp" "logfile.txt" /B > nul
del "logfile.tmp"

答案 1 :(得分:1)

有一种方法可以使用PowerShell执行此操作:

powershell "echo HelloWorld | tee test.txt"

另一种没有PowerShell的方法可能是输入接收输出的文件:

echo HelloWorld > test.txt | type test.txt

我更喜欢第一种解决方案......

答案 2 :(得分:1)

Windows实际上没有tee命令缺少PowerShell Tee-Object(别名tee)。这是一个cmd脚本子例程,它将产生tee效果。 DoMsg子例程会将所有内容追加到日志文件中,然后将其写入stdout。

@ECHO OFF
CALL:DoMsg ECHO hello, world
CALL:DoCmd DIR
EXIT /B 0

:DoMsg
ECHO %* >"%TEMP%\domsg.tmp"
TYPE "%TEMP%\domsg.tmp" >>test.log
TYPE "%TEMP%\domsg.tmp"
GOTO:EOF

:DoCmd
CALL:DoMsg CMD: %*
%*
GOTO:EOF

答案 3 :(得分:1)

如果您不需要实时执行这两项操作,则可以使用2个单独的命令:

echo hello world > test.log
type test.log

也可以在一行中完成:

echo hello world > test.log & type test.log