1

我花了今天早上搜索谷歌,空手而归,来到这里寻找我的答案。你们总是提供令人敬畏的东西。

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

代码:

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 天的文件,但老板希望占用空间小,使用单个文件。

有什么想法或想法吗?

4

2 回答 2

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

)
于 2013-06-24T17:48:53.087 回答
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当前月份是一月,那么再减去 8800 (=100000 - 1200)

接下来,查找包含“进程完成”字符串的最后一个日志行号,该字符串的日期比一个月前的日期少,并构建一个skip子句以跳过该行号(将被删除,因为这些都是一个多月大)

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

我将 MOVE 保留为 an ECHO,以便使用之前和之后的版本。检查后,删除ECHO以用新日志文件替换旧日志文件。

如果您希望计算正好是 30 天,那么只需在目标日期上稍作调整即可。

于 2013-06-24T23:08:16.957 回答