|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удаление строк из txt файлов |
|
|
CMD/BAT - Удаление строк из txt файлов
|
Новый участник Сообщения: 42 |
День добрый, помогите решить одну задачку..
в поиске что то не смог найти что нужно ( в общем есть папка Logs, внутри каждый день создается папка с нов датой, и каждый день пишутся файлы в формате txt с датой в названии, суть логов сводится к тому что 99% строк занимает [2000001] дата время files not found [2000095] дата время files not found и иногда проскакивает в лог что файл отправлен [2000156] дата время file 80009547.dat has been sent ну бывает конечно и таое что файл слишком большой допустим [2000042] дата время error file size ну что то примерно такое.. эти команды пишутся каждые 5 секунд, и за день собирается столько мусора что потом блокнот их открывает приличное время.. так собственно задачка, хочу сделать bat, чтобы искал за предыдущий день логи и удалял оттуда строки содержащие "files not found", а строки с ошибками и успешными отправками оставлял крайне желательно чтоб это было возможно запихать в планировщик задач и чтоб он это делал на постоянной основе |
|
Отправлено: 11:05, 30-09-2022 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Опишите подробнее строение каталога Logs.
А саму программу, которая пишет логи, нельзя подкрутить, чтобы она не писала в лог, если файлов нет? |
------- Отправлено: 14:40, 30-09-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
D:\logs\20221002\кучацифр.txt D:\logs\20221003\кучацифр.txt файлов в каждой папке обычно 2-3шт ну и естественно, сегодня D:\logs\20221003\кучацифр.txt этот файл недоступен тк пишется лог программу подкрутить нельзя ( |
|
Отправлено: 08:23, 03-10-2022 | #3 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:18, 03-10-2022 | #4 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата John87:
Цитата John87:
Исходные файлы должны быть неизменными (их удалять не надо?)? Надо ли слить все данные в единственный файл или количество целевых файлов должно соответствовать количеству исходных? Кодировка файлов имеет значение? |
|||
------- Последний раз редактировалось YuS_2, 03-10-2022 в 10:51. Отправлено: 10:38, 03-10-2022 | #5 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 13:04, 03-10-2022 | #6 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Цитата YuS_2:
можно и в 1 файл, без разницы кодировка в итоге значения не имеет |
||
Отправлено: 08:24, 04-10-2022 | #7 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:55, 04-10-2022 | #8 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата John87:
![]() Инструменты не требуют ни любви, ни ненависти, ими просто надо учиться пользоваться... а если лень, то придется отверстия, например, выдалбливать молотком и пробойником, вместо дрели... Цитата John87:
Вот скрипт powershell, с помощью которого, Вы можете это сделать интуитивно (снабжен комментариями): # Путь к каталогу: $fldsrc = 'D:\LOGS' # Получение наименования каталога по дате, меньшей текущей на 1 день: $fldin = get-date((get-date).adddays(-1)) -f 'yyyyMMdd' # Общий путь к каталогу с предыдущей датой: $fld = $fldsrc + '\' + $fldin # Фильтр для отбора файлов логов: $flt = '*.txt' # Шаблон для отбора строк на удаление $pattern = 'files not found' # Кодировка: $enc = 'utf8' # Наименование с путем целевого файла: $out = $fld + '\' + $fldin + '.out' # Собственно, код обработки: dir $fld -filter $flt -file|%{ (sls -path $_.fullname -pattern $pattern -notm -all -enc $enc).line del $_.fullname }|out-file $out -enc $enc |
||
------- Отправлено: 10:06, 04-10-2022 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off cls Set "BoxIn=Z:\Logs" Set "Log=*.txt" Set "KeyWord=files not found" FOR /F "usebackq skip=1 delims=" %%d IN (`2^>nul Dir "%BoxIn%" /A:D /O:-D /T:C /B`) DO ( FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%%d\%Log%" /A:-D /B`) DO ( 2>nul >"%BoxIn%\%%d\%%f.tmp" (More "%BoxIn%\%%d\%%f"|Find /I /V "%KeyWord%") >nul Move /Y "%BoxIn%\%%d\%%f.tmp" "%BoxIn%\%%d\%%f" ) GoTo :End ) :End pause Exit /B Если исходные файлы оставим без изменений. Получаем суммарный файл. @Echo Off cls Set "BoxIn=Z:\Logs" Set "Log=*.txt" Set "KeyWord=files not found" FOR /F "usebackq skip=1 delims=" %%d IN (`2^>nul Dir "%BoxIn%" /A:D /O:-D /T:C /B`) DO ( cd.>"%BoxIn%\%%d\%%d.txt" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%%d\%Log%" /A:-D /B /O:D /T:C`) DO ( 2>nul >>"%BoxIn%\%%d\%%d.txt" (More "%BoxIn%\%%d\%%f"|Find /I /V "%KeyWord%") ) GoTo :End ) :End pause Exit /B |
------- Последний раз редактировалось megaloman, 04-10-2022 в 20:49. Отправлено: 20:30, 04-10-2022 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - чтение строк из файла и последующая вставка этих строк в copy con file.txt | sermister1 | Скриптовые языки администрирования Windows | 5 | 11-06-2020 15:46 | |
Любой язык - [решено] Добавить блоки строк из одного txt файла в другие txt файлы | Alexander_88 | Скриптовые языки администрирования Windows | 7 | 06-07-2019 00:15 | |
Любой язык - Удаление из txt файлов не нужных строк и дубликатов строк. | voler | Скриптовые языки администрирования Windows | 1 | 26-02-2018 14:10 | |
CMD/BAT - [решено] удаление части строк из всех текстовых файлов в папке | icq99999999 | Скриптовые языки администрирования Windows | 4 | 06-11-2013 07:19 | |
Удаление файлов из списка указанного в txt | blacks2 | Вебмастеру | 28 | 02-09-2009 20:09 |
|