for this purpose I use the following:
set LogFile=somepath\logfile.txt
set logg=^> _^&type _^&type _^>^>%LogFile%
echo this goes to screen AND file! %logg%
This is a bit tricky.
So let’s disassemble that line to four parts:
set logg= ^> _ ^&type _ ^&type _^>^>%LogFile%
The Idea is to print the line to a temporary file (named _
) (second part)
then type the contents of that file to screen (third part)
then type it to the logfile (fourth part).
Put that all to a variable (first part), so you don’t have to type that monsterstring to every line. (this is the reason why the >
and &
are escaped with ^
)
So every time you use
echo whatever %logg%
it will appear on the screen AND write to %logfile%
Note that this will also work:
%logg% echo whatever
Edit djangofan:
Also, you can do it with functions:@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
Edit Stephan:
If you use CALL, the %logg%
would be overkill. In that case I would just use:
:logit
echo %~1
echo %date%,%time% - %~1 >>logfile
exit /b 0
This might be the best solution to the original question, because the Date/Time will be written into logfile, but not on the screen.
Btw: you don’t have to delete the tempfile every time you use it, just delete it one time, just before the batch ends.