2017-02-15 35 views
0

我有一個每五秒更新一次的.txt文件。在windows中每隔n秒刪除文本

22:37:03 

Some text 1 

22:37:08 

Some text 2 

Some text 3 

22:37:13 

Some text 4 

我有一個程序,從該文件讀取,我想是爲最新儘可能其開始該數據(在5秒內如果可能的話)。

如果我直接用程序讀取文件,它會從最早的入口開始,這可能會延遲兩個小時(取決於我何時開始寫入文件)。

是否有可以添加到批處理文件的命令,該批處理文件可以刪除比當前系統時間早8秒的任何數據?

我已經運行了一個命令,每5秒刪除前2行,但時間戳下的行數不同。

+1

我有點困惑,沒有能夠更新自身的txt文件;-)所以一個進程追加到文件,如果兩個進程同時更新文件(如果可能的話)存在文件鎖或丟失更新的風險。 – LotPings

+0

我明白你的觀點。該文件是由程序創建的,日誌原樣。一個不同的程序然後讀取這個日誌。 – Roo

回答

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 

你需要改變的sourcedirdestdir設置以適合你的情況。

我用了一個名爲q42253025.txt的文件來存放我的測試數據。

假設filename1是您的日誌文件,那麼此代碼將讀取該文件並從最終時間戳開始創建一個包含該日誌文件部分的新文件。

我正在做一些假設。首先,您不需要空行,其次是包含兩個或更多冒號的行是時間戳行。我還沒有測試過「毒性字符」的效果(那些對cmd有特殊含義的符號,如!%^&><|

如果過程花費太長時間(例如當生成器程序需要它時仍然保留文件以執行下一次寫入),然後可能將您的日誌複製到一個完全獨立的文件,然後在副本上使用此過程可能適用於您。

+0

工作,謝謝。 – Roo

0

如果文件被每5秒更新一次,並要表現出任何超過8秒年輕,那麼你當然希望最後的時間戳和下面的線(S):

@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 

(保留任何空行( s),即使與「有毒字符」)工作