2017-02-15 9 views
0

У меня есть .txt-файл, который обновляется каждые пять секунд.Удалить текст каждые n секунд в окнах

22:37:03 

Some text 1 

22:37:08 

Some text 2 

Some text 3 

22:37:13 

Some text 4 

У меня есть программа, которая считывает эти данные с начала файла, который я хотел бы быть в курсе, насколько это возможно (в течение 5 секунд, если это возможно).

Если я прочитал файл непосредственно с программой, он начинается с самой ранней записи, которая может занять до двух часов (в зависимости от того, когда я начал писать файл).

Есть ли команда, которую я мог бы добавить в пакетный файл, который удалит любые данные, которые были бы на 8 секунд старше текущего системного времени?

У меня уже есть команда, которая удаляет первые 2 строки каждые 5 секунд, но количество строк под отметкой времени меняется.

+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 

Вам потребуется изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами.

Я использовал файл с именем q42253025.txt, содержащий ваши данные для моего тестирования.

Предполагая, что filename1 - это ваш файл журнала, тогда этот код будет читать этот файл и создавать новый файл, содержащий этот раздел файла журнала, с окончательной отметки времени.

Я делаю несколько предположений. Во-первых, вам не нужны пустые строки, а во-вторых, любые строки, содержащие два или более двоеточия, являются строками timestamp. Я не тестировал эффекты «ядовитых символов» (те символы со специальным значением cmd, как !%^&><|)

Если процедура занимает слишком много времени (так что она все еще удерживает файл, когда программа генератора хочет для выполнения следующей записи), возможно, копируя ваш журнал в полностью отдельный файл, тогда использование этой процедуры на копии может сработать для вас.

+0

Это сработало, спасибо. – Roo

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 

(сохраняет любую пустую строку (s), работает даже с «ядовитыми символами»)