感谢您查看我的问题。
我有一个在jenkins windows batch命令提示符下运行的批处理命令。让我们来做一个简单的命令
echo hello world
我想将此命令输出写入文件以及此输出以在命令提示符下显示。我试过以下两种方式。
echo helloworld |tee -a .\test.log
echo hello world >>.\test.log >>CON
以上两种都不起作用。
任何人都可以帮我解决这个问题。
谢谢, R Dama。
答案 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