How do I make a log of all ECHO commands in a BATCH file?

后端 未结 4 1820
猫巷女王i
猫巷女王i 2020-12-03 11:39

I am trying to use a BATCH file as a choose your own adventure story in which the user can create a character and be called by name and such by the characters in the story.

4条回答
  •  误落风尘
    2020-12-03 12:33

    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.

提交回复
热议问题