この目的のために、私は以下を使用します:
set LogFile=somepath\logfile.txt
set logg=^> _^&type _^&type _^>^>%LogFile%
echo this goes to screen AND file! %logg%
これは少しトリッキーです。それでは、その行を 4 つの部分に分解しましょう。
set logg= ^> _ ^&type _ ^&type _^>^>%LogFile%
行を一時ファイル (名前は_
) に出力し (2 番目の部分)、そのファイルの内容を画面に入力し (3 番目の部分)、それをログファイルに入力します (4 番目の部分)。
そのすべてを変数 (最初の部分) に入れて、そのモンスター文字列をすべての行に入力する必要がないようにします。>
(これが、 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
Stephan の編集: CALL を使用する%logg%
と、やり過ぎになります。その場合、私はただ使用します:
:logit
echo %~1
echo %date%,%time% - %~1 >>logfile
exit /b 0
日付/時刻はログファイルに書き込まれますが、画面には書き込まれないため、これが元の質問に対する最良の解決策である可能性があります。ところで: 使用するたびに一時ファイルを削除する必要はありません。バッチが終了する直前に一度だけ削除してください。