Sea*_*ain 11 windows batch-file command-prompt
我正在尝试使用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%
Run Code Online (Sandbox Code Playgroud)
这有点棘手.那么让我们将该行拆解为四个部分:
set logg= ^> _ ^&type _ ^&type _^>^>%LogFile%
Run Code Online (Sandbox Code Playgroud)
想法是将行打印到临时文件(命名_
)(第二部分),然后键入该文件的内容到屏幕(第三部分),然后将其键入日志文件(第四部分).
将所有内容都放在一个变量(第一部分)中,这样就不必为每一行输入那个monsterstring.(这就是为什么>
和&
逃脱的原因^
)
所以每次使用
echo whatever %logg%
Run Code Online (Sandbox Code Playgroud)
它将出现在屏幕上并写入 %logfile%
请注意,这也将起作用:
%logg% echo whatever
Run Code Online (Sandbox Code Playgroud)
编辑 djangofan:此外,您可以使用以下功能:
Run Code Online (Sandbox Code Playgroud)@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
编辑斯蒂芬:如果你使用CALL,%logg%
那就太过分了.在那种情况下,我会使用:
:logit
echo %~1
echo %date%,%time% - %~1 >>logfile
exit /b 0
Run Code Online (Sandbox Code Playgroud)
这可能是原始问题的最佳解决方案,因为日期/时间将写入日志文件,但不会写入屏幕.顺便说一下:每次使用时都不必删除临时文件,只需在批处理结束前删除一次即可.
您无法在批处理脚本中执行此操作,但如果定义函数,则可以在函数块内输出数据,该数据也会在函数返回之前写入日志文件,如下所示:
@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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34998 次 |
最近记录: |