Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск слов и вывод количества без пересчета

Ответить
Настройки темы
CMD/BAT - Поиск слов и вывод количества без пересчета

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго. Появилась сильная задача, которую осилить не смог без полноценного опыта.

Имеется: несколько файлов script
script_2023-07-06_21-57-54.log
script_2023-07-06_21-59-55.log
script_2023-07-06_22-23-43.log
script_2023-07-06_23-57-11.log
script_2023-07-07_02-24-14.log
script_2023-07-07_04-53-45.log

Т.е. они формируются автоматически после запуска программы и записываются после завершения программы. Но есть нюанс: всегда создается активный (во время работы программы) файл log, который постоянно сам себя обновляет. Его я использовать для создания bat файла не могу (или могу?)
Требуется пройти по всем файлам и выцепить количество строк с определенным содержанием. Строка имеет вид:
SCRIPT : string str = '[TRADER] Player: (Name) DF5gGthyj6OKv_PeDFh6hEEChlIGE-cIFc= #tm_sold Нарукавная повязка (Armband_Black)'
Такие строки могут быть и на 5 линии, и на 21040 линии, т.е. все файлы логов объемные сами по себе

По итогу:
1. Нужно чтобы скрипт прошел по всем файлам
2. Чтобы нашел данную строку и фразу "#tm_sold Нарукавная повязка (Armband_Black)"
3. Вывел количество данных строк по всем файлам в текстовый документ.
4. Не перезаписывал количество уже из проверенных файлов
5. Уходил на повторную проверку через n-время

Меня хватило на следующее для теста, но логично, что база файлов не собирается, а также сохранение происходит криво:
Код: Выделить весь код
@echo off

set /a count=0

:top
for /f "usebackq delims=" %%a in ("script*.log") do for %%i in (%%a) do (
if %%i == #tm_sold Нарукавная повязка (Armband_Black) set /a count+=1
)

echo count  : %count%

echo Timeout, next change do 5 sec
timeout /t 5
goto top

Отправлено: 03:29, 09-07-2023

 

Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


Цитата Zervan:
3. Вывел количество данных строк по всем файлам в текстовый документ. »
укажите формат "текстового документа"
Цитата Zervan:
4. Не перезаписывал количество уже из проверенных файлов »
противоречит п.3

Отправлено: 07:35, 09-07-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
укажите формат "текстового документа"
Любой, но пусть будет Count.txt

Цитата:
противоречит п.3
Не совсем понял... Просто сейчас идет проверка по одному файлу, но нет остальных по списку
А перезаписывание это к вопросу - можно ли сделать так, чтобы файл автоматически добавлял только новые значения.
Сейчас я переписал так, но все еще остальные файлы не подключаются
Код: Выделить весь код
@echo off

:top
set /a count=0

for /f "usebackq delims=" %%a in ("script*.log") do for %%i in (%%a) do (
if %%i == привет set /a count+=1
)

echo count  : %count%

echo Timeout, next change do 5 sec
timeout /t 5
goto top

Последний раз редактировалось Zervan, 09-07-2023 в 22:46.


Отправлено: 15:53, 09-07-2023 | #3


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:10, 09-07-2023 | #4


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
while ($true) {
   $count = 0;
   Get-ChildItem 'c:\dir' 'script_*.log' | Get-Content |
     Select-String -SimpleMatch '#tm_sold Нарукавная повязка (Armband_Black)' | #кодировка
     % { $count++ }
   Write-Host "count: $count"
   Start-Sleep 5
}
это powershell, но идея в полном проходе всех файлов каждый раз. Если сохранять состояние, то надо дополнительно реализовывать.

Отправлено: 19:12, 09-07-2023 | #5


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Sham:
while ($true) {
$count = 0;
Get-ChildItem 'c:\dir' 'script_*.log' | Get-Content |
Select-String -SimpleMatch '#tm_sold Нарукавная повязка (Armband_Black)' | #кодировка
% { $count++ }
Write-Host "count: $count"
Start-Sleep 5
} »
А через bat вообще нельзя реализовать? С Powershell не хотят работать нормально другие комбинации

Отправлено: 19:16, 09-07-2023 | #6


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Попытался модернизировать свой же код, но в итоге получил много ошибок
Код: Выделить весь код
@echo off

:top
set /a count=0

for /f "usebackq delims=" %%a in ("script*.log") do for %%i in (%%a) do (
if %%i == #tm_sold Нарукавная повязка (Armband_Black) set /a count+=1
)

echo count  : %count%

echo Timeout, next change do 5 sec
timeout /t 5
goto top
("script*.log") - пытается найти конкретно этот файл со *, а не общий список из того, что вообще может быть после _
#tm_sold Нарукавная повязка (Armband_Black) - из за # вопринимает строку как отдельный элемент.

Я понимаю, что задача простая, но я никогда не работал с этой историей и сломал голову)

Отправлено: 23:40, 09-07-2023 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск слов и вывод количества без пересчета

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Подсчет количества файлов в разных папках и вывод суммы количества Alexander_88 Скриптовые языки администрирования Windows 2 08-07-2019 03:37
.NET - [решено] Поиск слов hacker16 Программирование и базы данных 0 22-07-2014 21:10
C/C++ - Подсчёт количества слов в строке через цикл pashazt Программирование и базы данных 3 16-12-2012 10:54
CMD/BAT - [решено] поиск слов Letrblak Скриптовые языки администрирования Windows 2 09-12-2012 17:30
Вывод текста по колличеству слов PHP Ginger Вебмастеру 19 10-12-2004 11:59




 
Переход