[英]How do I make a log of all ECHO commands in a BATCH file?
我正在嘗試使用BATCH文件作為一個選擇你自己的冒險故事,用戶可以在其中創建一個角色,並通過名稱和故事中的角色進行調用。 它讓我在一小時后回復說,如果在包含故事的BATCH文件中或之后運行它會記錄所有ECHO命令,以便稍后玩家可以閱讀他們在任何給定游戲中所做的事情。
我希望日志文件讀取如下:
%date %% time%(echo命令顯示文件運行長度的所有文本)
不幸的是,我只能弄明白如何做一個只有日期和時間的loge文件。 把“>> StoryLog.txt”用於制作.txt文件,我在那里得到日期和時間,但它只是在我希望批處理文件在echoed txt中顯示之后顯示文本“>> StoryLog.txt”在“你往北走的路上>> StoryLog.txt”顯示在屏幕上。 這自然不會起作用。 我該怎么辦?
為此我使用以下內容:
set LogFile=somepath\logfile.txt
set logg=^> _^&type _^&type _^>^>%LogFile%
echo this goes to screen AND file! %logg%
這有點棘手。 那么讓我們將該行拆解為四個部分:
set logg= ^> _ ^&type _ ^&type _^>^>%LogFile%
想法是將行打印到臨時文件(名為_
)(第二部分),然后鍵入該文件的內容到屏幕(第三部分),然后將其鍵入日志文件(第四部分)。
將所有內容都放在一個變量(第一部分)中,這樣就不必為每一行輸入那個monsterstring。 (這就是為什么的原因>
和&
與轉義^
)
所以每次使用
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
這可能是原始問題的最佳解決方案,因為日期/時間將寫入日志文件,但不會寫入屏幕。 順便說一下:每次使用時都不必刪除臨時文件,只需在批處理結束前刪除一次即可。
由於一些編輯,我的另一個答案很長,這里有一個新的建議(沒有太大的改變,但它使代碼很容易閱讀):
@ECHO off
SET LogFile=logfile.out
set "say=call :logit "
%say% "This is my message!"
%say% "Hear my thunder?"
GOTO :end
:logit
ECHO %~1
echo %date% %time% - %~1 >>%logfile%
EXIT /B 0
:end
您不能在批處理腳本中按字面意思執行此操作,但是如果定義函數,則可以在函數塊中輸出數據,該函數也會在函數返回之前寫入日志文件,如下所示:
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
echo. 2>outfile.log
CALL :functionPerson "Jon Doe" jump
GOTO :END
:functionPerson fullname action
ECHO fullname is ^"%~1^"
ECHO action is %2
ECHO %1 performs action %2>> outfile.log
EXIT /B 0
:END
pause
每當你echo
玩家知道發生了什么時,你也可以echo
你的日志文件,在你的行開頭添加日期和時間:)對我來說簡單。 不知道你的腳本看起來如何。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.