Date 将ECHO附加到文本文件并限制为30天
我花了一上午时间搜索谷歌,结果空手而归,我来这里寻找我的答案。你们这些家伙总是表现得很棒 在批处理文件的末尾,我想将日期/时间附加到文本文件中。这将用作一个简单的历史记录日志文件。那部分很简单 代码: 输出:Date 将ECHO附加到文本文件并限制为30天,date,text,batch-file,append,dos,Date,Text,Batch File,Append,Dos,我花了一上午时间搜索谷歌,结果空手而归,我来这里寻找我的答案。你们这些家伙总是表现得很棒 在批处理文件的末尾,我想将日期/时间附加到文本文件中。这将用作一个简单的历史记录日志文件。那部分很简单 代码: 输出: 20130624 11:51:32.45 Process Complete 现在,我想把这段历史限制在30天之内。这就是我来找你的目的。我曾考虑过在文件夹的文件名中创建带有日期/时间的单个文件,并插入命令删除任何超过30天的文件,但老板希望占用一个小空间,只使用一个文件 有什么想法或想法
20130624 11:51:32.45 Process Complete
现在,我想把这段历史限制在30天之内。这就是我来找你的目的。我曾考虑过在文件夹的文件名中创建带有日期/时间的单个文件,并插入命令删除任何超过30天的文件,但老板希望占用一个小空间,只使用一个文件
有什么想法或想法吗?对于/f%%C in('find/C/v')^对于/f%%C in('find/C/v')^
for /f %%C in ('find /c /v "" ^<C:\Installs\~AcctRefreshLog.txt') do set count=%%C
if %count% LSS 30 (
ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt
)
在没有进一步信息的情况下,我假设日志文件中包含字符串“processcomplete”的行是您提到的那些行;而且您需要保留空行,最重要的是,我们可以采用“30天”的弹性定义
由于我的日期格式与您的不同,我只是用20130624
覆盖了日期。您需要删除该行
从格式为yyyymmdd的当前日期中减去100,即上个月的同一天。如果结果月份为00
,则当前月份为1月,因此再减去8800(=100000-1200)
接下来,查找包含“process complete”字符串的最后一个日志行号,该字符串的日期小于大约一个月前的日期,并构建一个子类skip
跳到该行号(该行号将被删除,因为这些行号已超过一个月)
然后将计算出的跳过应用于findstr/n
以构建一个新文件-减去不需要的数据
我已将移动保留为ECHO
,以便前后版本都可用。检查后,删除ECHO
,以用新日志文件替换旧日志文件
如果您希望计算时间正好为30天,那么只需对目标日期稍作调整即可
在没有进一步信息的情况下,我假设日志文件中包含字符串“processcomplete”的行是您提到的那些行;而且您需要保留空行,最重要的是,我们可以采用“30天”的弹性定义
由于我的日期格式与您的不同,我只是用20130624
覆盖了日期。您需要删除该行
从格式为yyyymmdd的当前日期中减去100,即上个月的同一天。如果结果月份为00
,则当前月份为1月,因此再减去8800(=100000-1200)
接下来,查找包含“process complete”字符串的最后一个日志行号,该字符串的日期小于大约一个月前的日期,并构建一个子类skip
跳到该行号(该行号将被删除,因为这些行号已超过一个月)
然后将计算出的跳过应用于findstr/n
以构建一个新文件-减去不需要的数据
我已将移动保留为ECHO
,以便前后版本都可用。检查后,删除ECHO
,以用新日志文件替换旧日志文件
如果您希望计算时间精确到30天,那么只需对目标日期稍作调整即可。告诉您的老板,他/她应该支付一笔费用如何?请提供更多详细信息:是否要从日志文件中删除日期早于30天的行?此日志文件在开始时是否有其他不同的信息?什么关于告诉你的老板,他/她应该支付一笔费用吗?请提供更多详细信息:你想从日志文件中删除日期超过30天的行吗?这个日志文件在开始时有其他不同的信息吗?啊。他可能会在那里打印其他东西。我应该计算XX:XX:XX.XX过程是否已完成
。将修复此问题啊。他可能会打印其他内容我应该算一下XX:XX:XX.XX进程是否完成了。我会解决这个问题的
for /f %%C in ('find /c /v "" ^<C:\Installs\~AcctRefreshLog.txt') do set count=%%C
if %count% LSS 30 (
ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt
)
for /f %%C in ('findstr /r /n "[0-9][0-9]**.**[0-9]*:[0-9]*:[0-9]*\.[0-9]*.*Process Complete " ^<C:\Installs\~AcctRefreshLog.txt ^| find /c "Process Complete"') do set /a count=%%C+1
if %count% LSS 30 (
ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt
) else (
ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete > C:\Installs\~AcctRefreshLog.tx
)
@echo OFF
SETLOCAL
SET "skip="
SET "targetdate=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%"
SET /a targetdate=20130624
:: Adjust back 1 month then compensate for was-January
SET /a targetdate-=100
IF %targetdate:~-4,2%==00 SET /a targetdate-=8800
FOR /f "tokens=1,2delims=: " %%i IN (
'findstr /n /i "process complete" yourlogfile.txt') DO (
IF "%%j" lss "%targetdate%" SET skip=skip=%%i
IF "%%j" geq "%targetdate%" GOTO trunc
)
:trunc
(
FOR /f "tokens=1*%skip%delims=:" %%i IN ('findstr /n "$" yourlogfile.txt') DO ECHO(%%j
)>newlogfile.txt
ECHO MOVE /y newlogfile.txt yourlogfile.txt
GOTO :eof