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

Компьютерный форум 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

 

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

fascinating rhythm


Moderator


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

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


Опишите подробнее строение каталога Logs.

А саму программу, которая пишет логи, нельзя подкрутить, чтобы она не писала в лог, если файлов нет?

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

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

Отправлено: 14:40, 30-09-2022 | #2



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

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


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


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

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


Цитата DJ Mogarych:
Опишите подробнее строение каталога Logs.
А саму программу, которая пишет логи, нельзя подкрутить, чтобы она не писала в лог, если файлов нет? »
D:\logs\20221001\кучацифр.txt
D:\logs\20221002\кучацифр.txt
D:\logs\20221003\кучацифр.txt
файлов в каждой папке обычно 2-3шт

ну и естественно, сегодня D:\logs\20221003\кучацифр.txt этот файл недоступен тк пишется лог

программу подкрутить нельзя (

Отправлено: 08:23, 03-10-2022 | #3


Аватара для BoBaH 13

Ветеран


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

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


Замена текста в файле скриптом JScript

Отправлено: 10:18, 03-10-2022 | #4


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата John87:
за день собирается столько мусора что потом блокнот их открывает приличное время.. »
Насколько большой получается файл за сутки... максимально?
Цитата John87:
файлов в каждой папке обычно 2-3шт »
От чего зависит наличие файлов больше одного?
Исходные файлы должны быть неизменными (их удалять не надо?)?
Надо ли слить все данные в единственный файл или количество целевых файлов должно соответствовать количеству исходных?
Кодировка файлов имеет значение?

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 03-10-2022 в 10:51.


Отправлено: 10:38, 03-10-2022 | #5


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

fascinating rhythm


Moderator


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

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


Powershell:
Код: Выделить весь код
(dir D:\logs -File -Recurse -Include "*.txt" |? {($_.LastWriteTime).date -eq (get-date).AddDays(-1).Date}).FullName |% {
$log = (gc $_) -notmatch 'files not found'
$log |Set-Content $_
}

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

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

Отправлено: 13:04, 03-10-2022 | #6


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


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

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


Цитата YuS_2:
Насколько большой получается файл за сутки.. »
около 5мб

Цитата YuS_2:
От чего зависит наличие файлов больше одного?
Исходные файлы должны быть неизменными (их удалять не надо?)?
Надо ли слить все данные в единственный файл или количество целевых файлов должно соответствовать количеству исходных?
Кодировка файлов имеет значение? »
исходные файлы я как раз хочу прохудить немного и избавить от мусора!
можно и в 1 файл, без разницы
кодировка в итоге значения не имеет

Отправлено: 08:24, 04-10-2022 | #7


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


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

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


Цитата DJ Mogarych:
Powershell »
ненавижу если честно ps..

з.ы. что то не работает (

Отправлено: 08:55, 04-10-2022 | #8


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата John87:
ненавижу если честно ps.. »
Звучит как: "да нафига мне ваши автомобили, я и на велосипеде неплохо передвигаюсь..."
Инструменты не требуют ни любви, ни ненависти, ими просто надо учиться пользоваться... а если лень, то придется отверстия, например, выдалбливать молотком и пробойником, вместо дрели...
Цитата 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
- здесь использованы пути, которые Вы указали ранее, но их можно корректировать...

-------
scio me nihil scire. Ѫ

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

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


Ветеран


Contributor


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

Профиль | Отправить 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



Компьютерный форум 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




 
Переход