为此,我使用以下内容:
set LogFile=somepath\logfile.txt
set logg=^> _^&type _^&type _^>^>%LogFile%
echo this goes to screen AND file! %logg%
这有点棘手。因此,让我们将该行拆解为四个部分:
set logg= ^> _ ^&type _ ^&type _^>^>%LogFile%
想法是将行打印到一个临时文件(名为_
)(第二部分),然后将该文件的内容输入到屏幕(第三部分),然后将其输入到日志文件(第四部分)。
将所有内容放入一个变量(第一部分),这样您就不必在每一行都输入那个怪物字符串。(这就是>
and&
被转义的原因^
)
所以每次使用
echo whatever %logg%
它将出现在屏幕上并写入%logfile%
请注意,这也将起作用:
%logg% echo whatever
编辑djangofan:另外,您可以使用以下功能:
@ECHO off
:: do not enable delayed expansion since it will break this method
SETLOCAL ENABLEEXTENSIONS
SET LogFile=logfile.out
SET Logg=^> tmp.out^&^& type tmp.out^&^&type tmp.out^>^>%LogFile%
CALL :logit "This is my message!"
CALL :logit "Hear my thunder?"
GOTO :end
:logit
ECHO %~1 %Logg%
DEL /Q tmp.out
EXIT /B 0
:end
pause
编辑斯蒂芬:如果你使用 CALL,那%logg%
将是矫枉过正。在那种情况下,我只会使用:
:logit
echo %~1
echo %date%,%time% - %~1 >>logfile
exit /b 0
这可能是原始问题的最佳解决方案,因为日期/时间将被写入日志文件,而不是在屏幕上。顺便说一句:您不必每次使用临时文件时都将其删除,只需在批处理结束之前将其删除一次即可。