将ECHO附加到文本文件并限制为30天

时间:2013-06-24 17:22:14

标签: date text batch-file append dos

今天早上我在谷歌上搜索,空手而归,来到这里寻找答案。你们总能提供出色的服务。

在批处理文件的末尾,我想在文本文件中附加日期/时间。这将用作简单的历史记录日志文件。那部分很容易。

代码:

ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt

输出:

20130624 11:51:32.45 Process Complete

现在,我想将此限制为30天的历史。这就是我找到你找到的。我曾考虑过在文件夹中创建文件名中包含日期/时间的单个文件,并插入命令删除30天以前的任何文件,但老板想占用的空间很小,只能使用一个文件。

有什么想法或想法吗?

2 个答案:

答案 0 :(得分:1)

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

)

答案 1 :(得分:0)

@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

在没有进一步信息的情况下,我假设您的日志文件中包含字符串“process complete”的唯一行是您提到的那些;还需要保留空行,最重要的是我们可以采用“30天”的橡胶定义。

由于我的日期格式与您的日期格式不同,我只是用20130624覆盖日期。您需要删除该行。

从yyyymmdd格式的当前日期开始,减去100给出当天上个月。如果结果月份是00,那么当前月份是1月,那么再减去8800(= 100000 - 1200)

接下来,查找包含“process complete”字符串的最后一个日志行号,该字符串的日期大于一个月前的日期,并构建skip子条款以跳过该行号(这将被删除,因为这些已超过一个月)

然后将计算的SKIP应用于findstr /n以构建新文件 - 减去不需要的数据。

我已将MOVE保留为ECHO,以便可以使用之前和之后的版本。检查后,删除ECHO以使用新的。

替换旧的日志文件

如果您希望计算时间恰好是30天,那么只需要与目标日期一起玩一下即可。