1 (изменено: im2002, 2013-07-01 19:37:42)

Тема: JS:удаление файлов из архива

Есть скрипт, который запускается из планировщика и делает архивы БД:

var FldeName = "D:\\DataBase";        // путь к папке, которая архивируется
var ArhName = "D:\\Archives";            // путь к папке, в которой хранятся  архивы
var ArhPref = "buh";                // префикс в названии архива

var rarExe = "\"C:\\Program Files (x86)\\WinRAR\\rar.exe\"";                
                                                                // путь к консольной версии winrar

var WshShell = WScript.CreateObject("WScript.Shell");                

WshShell.Run(rarExe + " a -r -ag " + ArhName + "\\" + ArhPref + " " + FldeName, 1, true);    

При этом в  папке Archives создаются файлы типа: buh20130701192922.rar

Как изящно написать код, который бы удалял старые архивные файлы, оставляя лишь заданное количество "самых свежих".
К примеру, если надо иметь архивацию за 10 суток, то при создании 11-ого архива, самый старый уничтожается.
Вот как-то так...

2 (изменено: DnsIs, 2013-07-01 19:59:56)

Re: JS:удаление файлов из архива

В чем подвох? Где сложность?

PS в сторону nnBackup смотрели?

Нас невозможно сбить с пути, нам пофигу куда идти.

3

Re: JS:удаление файлов из архива

DnsIs пишет:

В чем подвох? Где сложность?

PS в сторону nnBackup смотрели?

Да нет сложности, подходов много, есть готовые решения на cmd, на nncron, наверное также можно, я хотел написать  код в продолжение того куска, который я привел в примере, а не любое решение.  Вот там не так всё просто, как проанализировать файлы и выбрать "самый старый"? Если этого сделать можно только коряво и сложно, тогда ладно, откажусь от затеи...

4

Re: JS:удаление файлов из архива

Я сам такую задачу перед собой не ставил, если до завтра никто ничего не напишет, попробую набросать чего-нибудь.

А про nnBackup я писал, из-за такой ее возможности.

Нас невозможно сбить с пути, нам пофигу куда идти.

5

Re: JS:удаление файлов из архива

var N = 10; //макс. кол-во хранимых архивов
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var Files = FSO.GetFolder(ArhName).Files;
var FilesEnum = new Enumerator(Files);
var FilesList = [];
var FileName;
var RegEx = new RegExp("^" + ArhPref + "\\d{" + "YYYYMMDDHHMMSS".length + "}.rar$");
for (; !FilesEnum.atEnd(); FilesEnum.moveNext()) {
    FileName = FilesEnum.item().Name.toLowerCase();
    RegEx.test(FileName) && FilesList.push(FileName);
}
FilesList.sort();
for (var i = 0; i < FilesList.length - N; i++)
    Files.Item(FilesList[i]).Delete();
Забыл пароль и потерял e-mail.

6

Re: JS:удаление файлов из архива

Не проще определять "древность" файла по дате его создания или последнего изменения?

7 (изменено: shiz, 2013-07-02 02:31:56)

Re: JS:удаление файлов из архива

Serge Yolkin пишет:

Не проще определять "древность" файла по дате его создания или последнего изменения?

С точки зрения компьютера, может быть, и проще сравнивать даты чем строки, но общий порядок действий остаётся всё тем же. Кроме того, если проверять имя файла на соответствие определённому шаблону, чтобы не удалить лишнее, мы всё равно должны получить имя файла, а коль в нём заложены все необходимые сведения, зачем трогать ещё какие-то свойства?
Разве что, для подстраховки добавить проверку на соответствие имени файла времени его создания, но это точно не будет упрощением.

Забыл пароль и потерял e-mail.

8

Re: JS:удаление файлов из архива

большое спасибо shiz, примерно так и вот и хотел сделать разбор по именам, с RegEx не хватает опыта, буду пробовать, если будут вопросы по Вашему коду напишу.

9

Re: JS:удаление файлов из архива

Serge Yolkin пишет:

Не проще определять "древность" файла по дате его создания или последнего изменения?

Не проще. Но правильнее.