![]() |
Поиск и подсчет файлов содержащие одинаковые названия.
Здравствуйте! Прошу помочь с написанием скрипта (Не важно cmd или ps)
Объясню суть: Каждый день происходит бэкап баз 1С (средствами sql) их порядка 380+ шт. Соответственно диск заполняется за 8 дней. Вручную надоело удалять старые бэкапы. Но периодически бывает что базы удаляю с сервера, но бэкапы этой базы нужно сохранить (мало ли) Хочу сделать скрипт который будет: 1) Подсчитывать количество файлов содержащих одинаковое название (начало названия файла с бэкапом это название базы, оно в каждом бэкапе этой базы одинаковое, а далее через _ идет уже разные значения (день и т.д.)) 2) Если насчитывается более 5 шт файлов содержащих одинаковое название, эти файлы проверяются по дате и удаляются все старше 5 дней (5шт = 5дней), чтобы файлы которые меньше 5 шт оставались без изменений (как раз те которые просто нужно сохранить) Очень надеюсь на вашу помощь, сам не смогу знаний не хватает. |
1
Get-ChildItem -Path C:\Backup1C | Group-Object {$_.BaseName.split("_")[0]} 2 Цитата ownsmir: эти файлы проверяются по дате » взятой от куда? из имени файла или даты создания файла? если из имени, нужен образец форматов |
2
Цитата ownsmir: эти файлы проверяются по дате » взятой от куда? из имени файла или даты создания файла? если из имени, нужен образец форматов Из даты создания файлов Если не затруднит, можно все исполнение записывать в файл? на всякий случай... Очень благодарен за ответ, я бы точно не смог такое написать, на данном этапе |
Код:
@Echo Off |
Цитата:
|
Код:
$a=Get-ChildItem -Path C:\Backup1C | select creationtime, basename, fullname | Group-Object {$_.BaseName.split("_")[0]} чтобы просто посмотреть какие файлы попадут под удаление, уберите из кода "| Remove-Item -Force" Цитата:
|
Цитата:
+ @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 |
ownsmir, Фаил надо сохранить как .bat. Запускать как исполнимый файл, например, в проводнике. С какой маской хранятся ваши файлы? У меня сейчас маска *_*.bak (то есть имябазы_чтотоеще.bak). У Вас расширение бэкапов какое? В скрипте .bak Имябазы не должно содержать _.
Переименуйте ваш скрипт в .txt, приложите к сообщению. Неплохо бы сделать Dir "Папка с бэкапами" *.* >C:\txt.txt и приложить к сообщению, чтобы понять способ формирования имен . |
Цитата:
Цитата:
Прошу меня извинить! все работает! Единственное в таком формате лог, не совсем ясно что именно удалено Del "B:\SQLH\SQL17.Backup\ђЂ‰’ ‘Ђ‰„,ЋЋЋ_backup_2019_06_16_230018_9065042.bak" Del "B:\SQLH\SQL17.Backup\’„ Љ‡Њ, ЋЋЋ_backup_2019_06_16_230023_1953987.bak" |
ownsmir, Результат можно прочесть в редакторе, поддерживающем 866 кодировку.
Батники работают именно в этой кодировке по умолчанию. Но можно добавить строку Код:
@Echo Off |
Цитата:
$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" Супееер!! Огонь! Спасибо вам огромное! Счастья и добра вам! |
Время: 23:22. |
Время: 23:22.
© OSzone.net 2001-