Показать полную графическую версию : поиск новой строки в тхт файле
Xeruvim4ik
12-02-2014, 20:26
Добрый день,
Подскажите, возможно ли через cmd реализовать контроль за тхт-шником (точнее лог файлом) чтобы при появлении в файле определенной записи запускалось другое приложение/сценарий (почтовый клиент, рестарт машины и т.п.) ?
Может уже есть готовое решение, но что-то с гуглом в последнее время не дружу.
Размер лог-файла. Пример лог-файла. Частота проверки.
Если "по-простому", то как-то так:
@findstr /i "определённая запись" log.txt>nul&& start "" notepad|| call "%~f0"
Georgio, полагаю, что в коде не хватает скобок.
@findstr /i "определённая запись" log.txt && (start "" notepad) || (call "%~f0")
Georgio, при «call …» исчерпается глубина вложенности.
Скобки в данном случае не обязательны, а вот команду "call" действительно лучше заменить на "старую добрую" команду "goto" и добавить префикс "/c:" к ""определённая запись"":
:#
@findstr /ic:"определённая запись" log.txt>nul&& start "" notepad|| goto:#.
Могут быть проблемы, если файл "log.txt" постоянно открыт в программе на запись, тогда лучше работать с постоянно создаваемой копией.
Xeruvim4ik
13-02-2014, 13:32
размер в пределах 1 Мб
Частота проверки один-два раза в минуту
Гуллипут
16-02-2014, 22:46
Georgio, call можно просто убрать. Ещё со времён ДОСа такой вызов отрабатывался, как вызов без возврата.
То есть, командная строка
file.bat
даст нам переход к выполнению file.bat без возврата в вызвавший bat-файл.
Поэтому так:
@findstr /i "определённая запись" log.txt && (start "" notepad) || ("%~f0")
Но я бы добавил паузу, чтобы не мучить процессор (и тогда уж лучше goto):
echo Wscript.Sleep 5000>"%temp%\sleep5.vbs"
:loop
@findstr /i "определённая запись" log.txt && (start "" notepad) || (
cscript //NoLogo "%temp%\sleep5.vbs"
goto loop
)
Но я бы добавил паузу, чтобы не мучить процессор (и тогда уж лучше goto) »
Браво! Именно поэтому не "%~f0" и даже не cmd /c "%~f0".
Главное, чтобы не %0|%0 (шутка!).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.