Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   поиск новой строки в тхт файле (http://forum.oszone.net/showthread.php?t=277620)

Xeruvim4ik 12-02-2014 20:26 2308035

поиск новой строки в тхт файле
 
Добрый день,
Подскажите, возможно ли через cmd реализовать контроль за тхт-шником (точнее лог файлом) чтобы при появлении в файле определенной записи запускалось другое приложение/сценарий (почтовый клиент, рестарт машины и т.п.) ?
Может уже есть готовое решение, но что-то с гуглом в последнее время не дружу.

Iska 12-02-2014 20:48 2308051

Размер лог-файла. Пример лог-файла. Частота проверки.

Georgio 12-02-2014 20:59 2308058

Если "по-простому", то как-то так:

Код:

@findstr /i "определённая запись" log.txt>nul&& start "" notepad|| call "%~f0"

sov44 12-02-2014 21:06 2308069

Georgio, полагаю, что в коде не хватает скобок.
Код:

@findstr /i "определённая запись" log.txt && (start "" notepad) || (call "%~f0")

Iska 12-02-2014 21:06 2308070

Georgio, при «call …» исчерпается глубина вложенности.

Georgio 12-02-2014 21:52 2308102

Скобки в данном случае не обязательны, а вот команду "call" действительно лучше заменить на "старую добрую" команду "goto" и добавить префикс "/c:" к ""определённая запись"":

Код:

:#
@findstr /ic:"определённая запись" log.txt>nul&& start "" notepad|| goto:#

.


Могут быть проблемы, если файл "log.txt" постоянно открыт в программе на запись, тогда лучше работать с постоянно создаваемой копией.

Xeruvim4ik 13-02-2014 13:32 2308409

Вложений: 1
размер в пределах 1 Мб

Частота проверки один-два раза в минуту

Гуллипут 16-02-2014 22:46 2310151

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
)


Georgio 17-02-2014 00:51 2310223

Цитата:

Цитата Гуллипут
Но я бы добавил паузу, чтобы не мучить процессор (и тогда уж лучше goto) »

Браво! Именно поэтому не
Код:

"%~f0"
и даже не
Код:

cmd /c "%~f0"
.

Главное, чтобы не
Код:

%0|%0
(шутка!).


Время: 00:04.

Время: 00:04.
© OSzone.net 2001-