|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
||||||
Мониторинг изменения файла с триггером26.04.2020, 20:29. Показов 6534. Ответов 39
Метки нет (Все метки)
Всех приветствую.
Есть файл log.txt, в который регулярно добавляются новые строки сторонней программой.
Возможно ли вообще в batch вести мониторинг изменений ?
0
|
||||||
| 26.04.2020, 20:29 | |
|
Ответы с готовыми решениями:
39
Мониторинг изменения файлов |
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
||||||||||||
| 26.04.2020, 23:07 | ||||||||||||
Добавлено через 17 минут В данном скрипте периодичность проверки не задана, он в рамках бесконечного цикла проверяет файл log.txt. Наверное, правильно бы было задать хотя бы какой-то интервал секунд в 20-30, но это на Ваше усмотрение Добавлено через 8 минут Лучше так:
1
|
||||||||||||
|
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
|
||
| 27.04.2020, 07:55 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|
| 27.04.2020, 15:35 [ТС] | |
|
В целом вроде то что нужно, но где то в нюансах не работает. В примере выше у меня бесконечный цикл вызова hook, хоть я и не меняю ничего в log.txt.
Постараюсь детализировать задачу : Необходимо чтобы hook.cmd вызывался для каждой новой строки, которая появляется в файле, с момента запуска мониторинга. появилась новая строка - вытянули данные, что идут после символа ";" (это номер телефона), вызов hook, с передачей этого номера. Файл log.txt на момент запуска может быть пустым или иметь данные, "старые" строки никуда не передаются, важно что появится нового.
0
|
|
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
||
| 27.04.2020, 15:47 | ||
|
Добавлено через 2 минуты Либо действительно, как советовал Kubuntovod создавать триггер по аудиту события
0
|
||
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
||||||
| 27.04.2020, 16:00 [ТС] | ||||||
|
Вот, подробнее, в код добавил timeout.
0
|
||||||
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
|
| 27.04.2020, 16:08 | |
|
Текст в log.txt после ; состоит только и цифр? Вы вроде сказали, что это номер телефона
0
|
|
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|
| 27.04.2020, 16:19 [ТС] | |
|
Так и есть, вот скрин.https://prnt.sc/s6rs4y
Сам текст как в первом посте
0
|
|
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
||||||
| 27.04.2020, 16:34 | ||||||
|
Мистика какая-то, только вчера проверял и всё работало, а сегодня уже не отрабатывает команда:
Добавлено через 4 минуты Так, у меня заработало. Сценарий и файл log.txt в какой кодировке?
0
|
||||||
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|
| 27.04.2020, 17:02 [ТС] | |
|
UTF-8 все. В кодировке дело?
0
|
|
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
||
| 27.04.2020, 17:14 | ||
|
Добавлено через 6 минут А проблема сейчас актуальна? Попробуйте перезапустить весь процесс, но учитывайте, что если в log.txt нет хотя бы одной строки вида 27.04.2020 17, то ошибка повторится (17 я думаю понятно почему)
1
|
||
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|
| 27.04.2020, 17:32 [ТС] | |
|
В логе 1 строка. Запущен скрипт.
Ошибки findstr нет, но хукает по таймауту) https://prnt.sc/s6tbb9 Если честно не совсем понял роль 1.txt в скрипте и почему вы обратили внимание на необходимость именно 17 часов в строке.
0
|
|
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|
| 27.04.2020, 17:42 [ТС] | |
|
Так, поправил строку в логе, строго как вы сказали 27.04.2020 17****
Если честно не понял почему нужно строго чтобы дата совпадала с сегодняшней с точностью до часа (17 часов) Также не понял какую роль выполняет 1.txt.. Поведение поменялось, теперь в лог по таймауту сыпется сама эта строка (полностью) https://prnt.sc/s6tlpe Я приложил свои файлики к посту, может вы свой вариант приложите?
0
|
|
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
|
| 27.04.2020, 17:47 | |
|
А, ну из скриншота всё ясно) У Вас дата стоит 25.04.2020, поэтому и циклично идёт hook!
Давайте я объясню логику работы сценария, чтобы Вы понимали. С периодичностью в 1 секунду команда findstr шерстит файл на поиск строки вида: текущая дата текущий час. Последнюю совпадающую строку по данному шаблону он кладёт в переменную (точнее часть строки после ";") и сверяет эту часть строку с наличием аналогичной в файле 1.txt Если её нет, то получается, что последняя строка из log.txt, которую мы занесли в переменную новая и это сигнализирует о том, что её мы можем отправить в качестве параметра hook.cmd и заменить старую строку в 1.txt на эту. Ну а дальше всё по той же схеме. Алгоритм я придумал исходя из содержимого файла log.txt, как я понял новая строка в нём появляется не ранее, чем через минуту. Если у Вас есть предложение как Вы это видите, то напишите, обсудим, при возможности реализуем
0
|
|
|
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,901
|
||||||
| 28.04.2020, 08:25 | ||||||
|
WATCHER.BAT ( предпочтительная кодировка UTF-8 без BOM)
Пояснение. Невооруженным глазом видно, что сценарий состоит из двух частей. 1) BAT-часть ( где две собаки @@ [строки 1 - 7] ) неизменна. Назначение bat-части: а) выудить путь к последней версии компилятора C# из недр .NET Framework б) выделить оставшуюся часть данного исходного текста( без символов @@ в начале ) и откомпилировать её как исходный текст C#, получая на выходе исполняемый файл __watcher.exe Назвав этот сценарий watcher.bat, вы получите __watcher.exe, Назвав этот сценарий myapp.bat, вы получите __myapp.exe итд. Как вы яхту назовёте, так она и поплывёт. в) Кроме того, при повторном обращении к watcher.bat и при наличии рядом __watcher.exe повторной компиляции не происходит, просто сразу запускается __watcher.exe. Исполняемый exe-файл __watcher.exe вполне самодостаточен. Его можно скопировать в любое другое место и запускать оттуда самостоятельно с такими же параметрами. 2) C# - часть может изменяться пользователем с инженерным образованием под свои нужды. 3) Данный батник можно запустить на любой машине с установленным .Net Framework ( XP, VISTA, ... далее со всеми остановками ). Доустановка Powershell не требуется, но полезна. Крайне желательно, чтобы версия .Net Framework была не ниже 4.7 4) Никаких доустановок ПО не требуется, просто запустить. Небольшое описание функционала Как уже можно догадаться, реализован мониторинг директории, в которой лежит log-файл и, соответственно, реализован мониторинг самого лог-файла на изменение его размера и изменения атрибута времени изменения. Для этого использован сервис об`ектов ядра WaitForSingleObjectEx через высокоуровневый dotnet-интерфейс FileSystemWatcher ( тот же, что и для Powershell ). После запуска программы она ожидает изменения в заданном лог-файле и если таковые вдруг случатся ( о, ужас ), сработает вызов callback-функции, которая прочитает данные последние изменения и запустит на исполнение внешний сценарий hook.bat, предварительно записав изменения в файлик и передав hook.bat имя этого файлика. Это, конечно же, весьма спорное развитие событий, но так у нас захотел ТС. В конце концов, имея в руках исходник, можно менять стратегию как угодно. Закончить работу следящей программы можно, нажав на красную кнопку 'q'. Надёжность данного решения пока не оценивал, но рабочие тесты выглядели на удивление прилично.
1
|
||||||
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
||||||
| 28.04.2020, 20:08 [ТС] | ||||||
|
volodin661, мощную штуку вы запилили. У меня пока не получилось протестировать, может какой то пункт документации пропустил.
При запускаю так скомпилированного файла говорит:
0
|
||||||
|
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,901
|
|||||||||||
| 28.04.2020, 21:03 | |||||||||||
|
cyberdee, пока проверить не могу, виндуса нет.
А не был ли logfile.log пустым? Нормального тестирования с моей стороны не было, увы. На настоящий момент исходные параметры, чтобы оживить графиню, наметим следующие: должна быть проверяемая поддиректория, она называлась у меня procdir и в ней должен быть подопытный не пустой файл logfile.log и кодировка его пусть будет utf-8 с BOM. параметры запуска из cmd:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|||||||||||
| 30.04.2020, 20:07 [ТС] | |||||||||||
|
volodin661, спасибо, действительно на пустой файл ругалось.
Добавил тестовых данных. Мониторинг запустился! При попытке добавить строку через Notepad++ получаем ошибку
Добавлено через 35 минут Karen87, не удалось у меня заставить работать ваш вариант(. Он у меня просто перебирает строки и делает по ним хуки (echo hook) в каждом цикле, независимо меняется что либо или нет. https://prnt.sc/s8rq47 Нашел на просторах интернета похожий скрипт, который работает, но возвращает всю строку а не только телефон. Не подскажете как цикл подкрутить чтобы разделитель сработал? пробовал играться с tokens и delims, что то не получается. Очень у меня туго с синтаксисом batch ![]()
0
|
|||||||||||
|
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
|
|
| 30.04.2020, 20:26 | |
|
cyberdee, А Вы уверены, что на скриншоте мой код? Я что-то не вижу в нем задействования переменной string
1
|
|
|
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
|
|
| 30.04.2020, 20:53 [ТС] | |
|
Karen87, вы правы, привел в соответствие с вашим кодом. Возможно я скопировал код из старой версии поста.
Протестировал, теперь телефон корректно выцепляется, но все еще цикл срабатывает не по изменению файла, а по таймауту цикла (задал 2 секунды). https://prnt.sc/s8s9in Можем ли мы тут не привязываться к датам-времени е в строках, а просто брать телефон из последней строки, после изменения файла? Вот тот вариант что я выше скинул кажется так и работает. Только понять что поменять, чтобы бралась строка после разделителя.
0
|
|
| 30.04.2020, 20:53 | |
|
Помогаю со студенческими работами здесь
20
Мониторинг изменения цвета блока Правильный мониторинг изменения содержимого div Мониторинг каталога на предмет изменения содержимого Мониторинг файла? Мониторинг файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|