|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Поиск и подсчет файлов содержащие одинаковые названия. |
|
|
Любой язык - [решено] Поиск и подсчет файлов содержащие одинаковые названия.
|
Новый участник Сообщения: 46 |
Профиль | Отправить PM | Цитировать
Здравствуйте! Прошу помочь с написанием скрипта (Не важно cmd или ps)
Объясню суть: Каждый день происходит бэкап баз 1С (средствами sql) их порядка 380+ шт. Соответственно диск заполняется за 8 дней. Вручную надоело удалять старые бэкапы. Но периодически бывает что базы удаляю с сервера, но бэкапы этой базы нужно сохранить (мало ли) Хочу сделать скрипт который будет: 1) Подсчитывать количество файлов содержащих одинаковое название (начало названия файла с бэкапом это название базы, оно в каждом бэкапе этой базы одинаковое, а далее через _ идет уже разные значения (день и т.д.)) 2) Если насчитывается более 5 шт файлов содержащих одинаковое название, эти файлы проверяются по дате и удаляются все старше 5 дней (5шт = 5дней), чтобы файлы которые меньше 5 шт оставались без изменений (как раз те которые просто нужно сохранить) Очень надеюсь на вашу помощь, сам не смогу знаний не хватает. |
|
Отправлено: 14:30, 21-06-2019 |
Старожил Сообщения: 427
|
Профиль | Отправить PM | Цитировать 1
Get-ChildItem -Path C:\Backup1C | Group-Object {$_.BaseName.split("_")[0]} 2 Цитата ownsmir: эти файлы проверяются по дате » взятой от куда? из имени файла или даты создания файла? если из имени, нужен образец форматов |
Последний раз редактировалось Ageron, 21-06-2019 в 15:21. Отправлено: 15:08, 21-06-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать 2
Цитата ownsmir: эти файлы проверяются по дате » взятой от куда? из имени файла или даты создания файла? если из имени, нужен образец форматов Из даты создания файлов Если не затруднит, можно все исполнение записывать в файл? на всякий случай... Очень благодарен за ответ, я бы точно не смог такое написать, на данном этапе |
Отправлено: 15:22, 21-06-2019 | #3 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать @Echo Off Set "BoxIn=Z:\Box_In" Set "Mask=*_*.bak" Set /A N=5 Set "Log=Z:\Box_In\%Date%.Log" FOR %%f IN ("%BoxIn%\%Mask%") DO Call :MemoBak "%%f" FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@"`) DO ( FOR /F "usebackq skip=%N% delims=" %%f IN (`2^>nul Dir "%BoxIn%\%%j" /B /A:-D /O:-D /T:C`) DO ( >>"%Log%" Echo Del "%BoxIn%\%%f" Del "%BoxIn%\%%f" ) ) Exit /B :MemoBak FOR /F "tokens=1,* delims=_" %%i IN ("%~n1") DO If Not "%%j"=="" Set "@@%%i=%%i_*%~x1" Exit /B |
------- Отправлено: 16:04, 21-06-2019 | #4 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
||
Отправлено: 16:45, 21-06-2019 | #5 |
Старожил Сообщения: 427
|
Профиль | Отправить PM | Цитировать $a=Get-ChildItem -Path C:\Backup1C | select creationtime, basename, fullname | Group-Object {$_.BaseName.split("_")[0]} foreach ($c in $a) {if ($c.count -cgt 5) {$c.Group | Sort-Object creationtime | Select-Object -First ($C.count - 5) | Remove-Item -Force}} чтобы просто посмотреть какие файлы попадут под удаление, уберите из кода "| Remove-Item -Force" Цитата ownsmir:
|
|
Отправлено: 16:48, 21-06-2019 | #6 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Цитата Ageron:
+ @Echo Off + ~~~ Непредвиденная лексема "Off" в выражении или операторе. строка:8 знак:5 + FOR %%f IN ("%BoxIn%\%Mask%") DO Call :MemoBak "%%f" + ~ Отсутствует открывающий знак "(" после ключевого слова "for". строка:9 знак:5 + FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@"`) DO ( + ~ Отсутствует открывающий знак "(" после ключевого слова "for". строка:11 знак:36 + >>"%Log%" Echo Del "%BoxIn%\%%f" + ~ Отсутствует закрывающий знак ")" в выражении. строка:14 знак:3 + ) + ~ Отсутствует закрывающий знак ")" в выражении. строка:18 знак:5 + FOR /F "tokens=1,* delims=_" %%i IN ("%~n1") DO If Not "%%j"=="" Set "@@%%i=%%i ... + ~ Отсутствует открывающий знак "(" после ключевого слова "for". строка:1 знак:1 + @Echo Off + ~~~~~ Оператор с символом "@" невозможно использовать для ссылки на переменные в выражении. "@Echo" может использоваться только как аргумент для команды. Для ссылки на переменные в выражении используйте "$Echo". + CategoryInfo : ParserError: ( [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken |
|
Отправлено: 17:18, 21-06-2019 | #7 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать ownsmir, Фаил надо сохранить как .bat. Запускать как исполнимый файл, например, в проводнике. С какой маской хранятся ваши файлы? У меня сейчас маска *_*.bak (то есть имябазы_чтотоеще.bak). У Вас расширение бэкапов какое? В скрипте .bak Имябазы не должно содержать _.
Переименуйте ваш скрипт в .txt, приложите к сообщению. Неплохо бы сделать Dir "Папка с бэкапами" *.* >C:\txt.txt и приложить к сообщению, чтобы понять способ формирования имен . |
------- Отправлено: 17:18, 21-06-2019 | #8 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Цитата Ageron:
Цитата megaloman:
Прошу меня извинить! все работает! Единственное в таком формате лог, не совсем ясно что именно удалено Del "B:\SQLH\SQL17.Backup\ђЂ‰’ ‘Ђ‰„,ЋЋЋ_backup_2019_06_16_230018_9065042.bak" Del "B:\SQLH\SQL17.Backup\’„ Љ‡Њ, ЋЋЋ_backup_2019_06_16_230023_1953987.bak" |
||
Отправлено: 17:19, 21-06-2019 | #9 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 17:35, 21-06-2019 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск и сортировка файлов по части названия | registeruser1 | Скриптовые языки администрирования Windows | 4 | 04-05-2017 09:21 | |
CMD/BAT - Необходимо из множества файлов скопировать строки содержащие слово | Борис_Спектор@vk | Скриптовые языки администрирования Windows | 3 | 02-02-2017 19:13 | |
Мультимедиа - Одинаковые превью у видео файлов | alleclf | Программное обеспечение Windows | 3 | 20-08-2013 09:34 | |
CMD/BAT - [решено] Скопировать названия файлов из папки и добавить символ в конец названия | kiber31 | Скриптовые языки администрирования Windows | 6 | 17-08-2012 14:04 |
|