我有一个每五秒更新一次的.txt文件。
22:37:03
Some text 1
22:37:08
Some text 2
Some text 3
22:37:13
Some text 4
我有一个程序从文件的开头读取这些数据,我希望尽可能最新(如果可能的话,在5秒内)。
如果我直接用程序读取文件,它会从最早的条目开始,这可能会落后两个小时(取决于我何时开始编写文件)。
是否有一个命令可以添加到批处理文件中,该文件会删除比当前系统时间早8秒的任何数据?
我已经运行了一个命令,每5秒删除前两行,但时间戳下的行数会有所不同。
答案 0 :(得分:0)
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q42253025.txt"
SET "outfile=%destdir%\outfile.txt"
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
FOR /f "tokens=1-3delims=:" %%p IN ("%%a") DO (
IF "%%r"=="" (>>"%outfile%" ECHO %%a) ELSE (>"%outfile%" ECHO %%a)
)
)
GOTO :EOF
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
我使用了一个名为q42253025.txt
的文件,其中包含我的测试数据。
假设filename1
是您的日志文件,那么此代码将读取该文件并从最终时间戳开始创建包含该日志文件部分的新文件。
我做了一些假设。首先,您不想要空行,其次是包含两个或更多冒号的任何行都是时间戳行。我还没有测试过"毒性角色的影响" (那些具有cmd
特殊含义的符号,如!%^&><|
)
如果过程花费的时间太长(当生成器程序想要执行下一次写入时仍然保留文件),那么可能将日志复制到一个完全独立的文件,然后在副本上使用此过程可能适用于你。
答案 1 :(得分:0)
如果文件每5秒更新一次并且您想要显示小于8秒的任何内容,那么您显然需要最后一个时间戳和以下行:
@echo off
REM get LineNo of last TimeStamp (subtract one for future use)
for /f "delims=:" %%a in ('findstr /n /r "^[ 012][0-9]:[0-5][0-9]:[0-5][0-9]$" test.txt') do set /a LastStart=%%a-1
REM show, starting with the found LineNo
more +%LastStart% test.txt
(保留任何空行,甚至可以使用&#34;毒药字符&#34;)