簡體   English   中英

如何記錄BATCH文件中的所有ECHO命令?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM