![]() |
Удаление файла по дате в Имени
Привет
Нужна помощь в создании скрипта, который удалял бы файлы, по дате а имени (формата название_yyyymmdd.bd) Суть в том, что бы оставлять 3-5 самых свежих файла (по дате в названии) остальные удалять перепробовал совмещать различные варианты, но для примера в CMD\BAT не хочет считывать имя Код:
@echo off главное, что бы работало спасибо |
Цитата:
Код:
@echo off |
А зачем ориентироваться на дату записанную в названии если у каждого файла и так есть аттрибуты времени? Тот же CreationTime
На Powershell будет выглядеть как-то так: Код:
$path = "C:\test\*" 1. Путь должен заканчиваться на \* чтобы корректно отрабатывал фильтр -Include *.bd (это ведь расширение файла, да? Если нет то подставь своё расширение), чтобы в свою очередь работать только с нужными файлами и пропускать скрытые системные файлы, если вдруг они есть. 2. -WhatIf в конце позволяет безболезненно посмотреть что сделает код - увидишь какие файлы будут удалены этим кодом без их фактического удаления. 3. Возможно понадобиться -Force там же, в конце. Зависит от наличия прав. 4. Если когда-нибудь придется изменить количество оставляемых файлов - $allfiles[5..($allfiles.Count - 1)] фильтрует элементы с пятого по последний. Т.к. нумерация элементов в массиве начинается с 0 - приходится отнимать 1 от количества элементов чтобы получить номер последнего ($allfiles.Count - 1), в данном случае для 10 файлов - последний номер 9. Соответственно фильтр $allfiles[5..9] удаляет элементы с пятого по девятый, оставляя элементы с 0го по 4ый (итого 5) |
Цитата:
|
Цитата:
Цитата:
|
kasab, я когда-то колхозил с прямо противоположной стороны: в имени бэкапа использовал не дату, а день недели - сама собой получалась авторотация с периодом в неделю. Хотя, конечно, негибко - лёгким движением руки переопределить период не получится (но так ли часто меняются такие настройки).
Цитата:
|
Цитата:
Цитата:
|
Charg, дату/время в имена файлов, особенно резервных копий, добавляют совсем не случайно. Ибо упомянутые Вами атрибуты файла внезапно — смертны.
|
Цитата:
|
Iska, А зачем двойной цикл? Можно так:
Код:
@Echo Off Код:
@Echo Off Цитата:
|
|
Iska, Простите великодушно, спешка, нет у Вас двойного цикла, а жена гонит на охоту на базар за мамонтом на обед ... :)
|
Цитата:
|
megaloman, спасибо, ясно, сочувствую.
Цитата:
Нам нужно удержать значение некоей конкретной даты/времени привязанным к конкретному файлу. И дата создания, и дата последней модификации файла для этого не годятся (даже если это именно одно из них по сути), поскольку оригинальные даты в любой момент могут быть утрачены неловким или бессознательным движением руки, в то время, как потребное значение даты/времени, тупо вставленное в имя файла, для утраты требует исключительно сознательных усилий. |
Цитата:
Да, чисто технически, есть возможность изменить файл так чтобы дата изменения обновилась а сам бэкап остался рабочим и валидным - но стоит ли предполагать что над бэкапом произвели именно такие действия? Вопрос не совсем однозначный но, имхо, ответ - нет, бэкап перестал быть бэкапом, во всяком случае на момент той даты которая написана в его имени. |
Цитата:
А чтобы быть уверенным в его валидности — тут уже другие методы нужны: блокировка от изменений, контрольные суммы и прочее. |
Цитата megaloman:
Имхо, еще лучше так: Код:
@Echo Off Цитата Iska: Код:
@echo off Оба Варианта работают, Спасибо По датам в атрибутах Создания: Сам бекап настраивал другой пользователь, грубо говоря, но разных серверах стоит батник, который раз в сутки копирует на один сервер в соответствующую папку файл базы, сохраняя на конечном сервере с датой текущей в имени. И каким то образом, дата создания и изменения остаются у всех "Бекапов" одинаковыми, и не меняются. Если бы они менялись, то на основе даты изменения и создавал бы батник, но тут то и был зарыт камень преткновения и задачу поставили смотреть именно в дату в имени файла. |
Время: 01:01. |
Время: 01:01.
© OSzone.net 2001-