Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - Удаление строк из txt файлов

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


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


Конфигурация

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


Изменения
Автор: John87
Дата: 30-09-2022
День добрый, помогите решить одну задачку..
в поиске что то не смог найти что нужно (

в общем есть папка 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

 

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


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

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


megaloman, толе лыжи не едут, то ле руки у мну не очень ((
BoxIn=D:\test1
KeyWord=no files to


Отправлено: 10:39, 05-10-2022 | #11



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

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


Ветеран


Contributor


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

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


John87,
Цитата John87:
есть папка Logs, внутри каждый день создается папка с нов датой ......сделать bat, чтобы искал за предыдущий день логи и удалял оттуда строки »
Я попробовал повторить ситуацию.
Вопросы:
1. Папка D:\test1 существует?
2. В папке D:\test1 должны быть как минимум 2 подпапки: сегодняшняя и за предыдущий день. Скрипт не привязан к дате. Он пропускает самую свежую папку (по времени создания) и обрабатывает одну предыдущую.
3. В подпапках есть файлы с указанной маской *.txt?

Если что-то из перечисленного отсутствует, то будет приведенная Вами картинка.
Кстати, если разово убрать GoTo :End то будут обработаны все подпапки, кроме самой свежей.
Но именно разово - все папки обрабатывать - лишнее время.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 13:22, 05-10-2022 | #12


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


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

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


megaloman, совсем забыл в тестовой папке создать еще одну. Спасибо, вроде работает!
теперь вопрос, он собирает нужное, кидает в нов файл, старые файлы он может удалить?

Отправлено: 08:21, 06-10-2022 | #13


Ветеран


Contributor


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

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


John87, старые файлы он может удалить.
Код: Выделить весь код
@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 (
		Echo "%BoxIn%\%%d\%%d"
		If Not Exist "%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%")
				Del "%BoxIn%\%%d\%%f"
			)
		)
		GoTo :End
	)
:End
pause
Exit /B
При наличии в подпапке суммарного файла повторно эта подпапка обрабатываться не будет. Учтите это, если от старого тестирования этот файл остался.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 10:00, 06-10-2022 | #14


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


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

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


Вложения
Тип файла: txt example.txt
(610 байт, 5 просмотров)

megaloman, начал пробовать на живом примере и меня постигла неудача ((

оказывается это не одна строка (( в итоге получил кучу остатков " затрачено 1.163 (sec.)"

Отправлено: 13:34, 07-10-2022 | #15


Ветеран


Contributor


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

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


John87, Дайте реальный файл и что надо удалять. Догадками задачу не решить. CMD команда, способная делать множественный поиск - FindStr - работает с поиском строк в кириллице только в 866 кодировке. С учетом этого вариант (там я привёл только варианты поиска с латиницей):
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Logs"
	Set "Log=*.txt"
	Set KeyWord=/C:"files not found" /C:"(sec.)" /C:"#imp.Statuses" /C:"error file size"

	FOR /F "usebackq skip=1 delims=" %%d IN (`2^>nul Dir "%BoxIn%" /A:D /O:-D /T:C /B`) DO (
		Echo "%BoxIn%\%%d\%%d"
		If Not Exist "%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"|FindStr /I /V %KeyWord%)
				Del "%BoxIn%\%%d\%%f"
			)
		)
		GoTo :End
	)
:End
pause
Exit /B
А не проще ли переформулировать задачу: надо не удалять какие-то строки из исходных файлов, а сохранить некоторые строки в другой файл по заданным ключам поиска, если они в латинице?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 13:14, 08-10-2022 | #16


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


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

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


Цитата megaloman:
А не проще ли переформулировать задачу: надо не удалять какие-то строки из исходных файлов, а сохранить некоторые строки в другой файл по заданным ключам поиска, если они в латинице? »
к сожалению там очень много что он умеет писать, посему проще избавиться от мусора!
на первое время удаление я исключу из формулы, пусть лежат оригиналы.

насколько сложно его научить обращаться с кирилицей в keyword?

я немного запутался, такой вопрос, куда дописать чтобы итог выполнения был сложен в отд папку?
те допустим чтоб он складывал также по папкам с датой но уже в Z:\ShortLogs допустим?

Отправлено: 13:01, 11-10-2022 | #17


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
>nul chcp 1251
	Set "BoxIn=Z:\Logs"
	Set "Log=*.txt"
	Set "ShortLogs=Z:\ShortLogs"

	Set KeyWord=^|find /V /I "files not found"^|find /V /I "Обработано.записей"^|find /V /I "затрачено"^|find /V /I  "error file size"

	If Not Exist "%ShortLogs%\*.*" Md "%ShortLogs%"

	FOR /F "usebackq skip=1 delims=" %%d IN (`2^>nul Dir "%BoxIn%" /A:D /O:-D /T:C /B`) DO (
		Echo "%BoxIn%\%%d\%%d"
		If Not Exist "%ShortLogs%\%%d.txt" (
			2>nul >>"%ShortLogs%\%%d.txt" (Type "%BoxIn%\%%d\%Log%"%KeyWord%) 
		)
		GoTo :End
	)
:End
pause
Exit /B
Батник сохранить в кодировке 1251 (например, блокнот NotePad)
И лучше бы Вы предоставили 1 файл для тестирования

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 11-10-2022 в 23:00.


Отправлено: 22:45, 11-10-2022 | #18


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


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

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


Вложения
Тип файла: rar BG.API.MessagingSystem.rar
(25.0 Kb, 3 просмотров)

Цитата megaloman:
И лучше бы Вы предоставили 1 файл для тестирования »
не досмотрел (

в прошлый раз закинул, на форуме ограничение на размеры (

Отправлено: 07:33, 12-10-2022 | #19


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


powershell
Код: Выделить весь код
$log = (gc "C:\temp\BG.API.MessagingSystem.log" -raw) -replace "`n`t","`t" -split "`n"
$log -notmatch 'Обработано.записей.статусов.отправленных.сообщений'

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:25, 12-10-2022 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход