Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 将ECHO附加到文本文件并限制为30天_Date_Text_Batch File_Append_Dos - Fatal编程技术网

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