Для архивации файлов старше определенной даты, например логов, предлагаю воспользоваться следующим скриптом на языке JScript:
if (WScript.Arguments.Length < 4)
{
WScript.Echo("Usage: archivelogs.js c:\\folder\\with_logs\\ log_extension c:\\temp\\filelist.txt c:\\folder\\archive_name_w/o_extension");
WScript.Quit();
}
var archname = new String();
var currdate = new Date();
var regexp = new RegExp(String().concat("\\.", WScript.Arguments(1), "$"), "i");
var shell = WScript.CreateObject("WScript.Shell");
var filesys = WScript.CreateObject("Scripting.FileSystemObject");
var filelist = filesys.CreateTextFile(WScript.Arguments(2), true, false);
var folder = filesys.GetFolder(WScript.Arguments(0));
var files = new Enumerator(folder.Files);
currdate.setDate(1);
currdate.setHours(0);
currdate.setMinutes(0);
currdate.setSeconds(0);
currdate.setMilliseconds(0);
for (; !files.atEnd(); files.moveNext())
{
if (regexp.test(files.item().Name))
if (files.item().DateLastModified < currdate)
filelist.WriteLine(files.item());
}
filelist.Close();
switch (currdate.getMonth())
{
case 0: archname = String().concat(WScript.Arguments(3), currdate.getFullYear()-1, "12"); break;
case 10:
case 11: archname = String().concat(WScript.Arguments(3), currdate.getFullYear(), currdate.getMonth()); break;
default: archname = String().concat(WScript.Arguments(3), currdate.getFullYear(), "0", currdate.getMonth());
}
shell.Run(String().concat("\"C:\\Program Files\\WinRAR\\Rar.exe\" m -ep -m5 -s ", archname, " @", WScript.Arguments(2)), 1, true);
filesys.DeleteFile(WScript.Arguments(2), true);
Как работает скрипт. Получив входные данные, выполняется поиск файлов по расширению в указанном каталоге. Если файл не изменялся в текущем месяце (поведение определяется в строках 14-18), то путь к нему записывается во временный список. Затем запускается WinRAR, который перемещает файлы в архив с указанным именем и суффиксом года и прошлого месяца, например: archname200712.rar, archname200803.rar.
Формат запуска скрипта: cscript.exe //nologo archivelogs.js путь_к_папке_с_файлами расширение_файлов путь_к_временному_списку_файлов путь_к_создаваемому_архиву_без_расширения
Такой же (почти) только на PowerShell. Архивирует файлы старше 30 дней. Arxiv_Rar.ps1:
Cd “путь к папке”
$var1 = get-date
# устанавливаем дату для нахождения элементов, старше 30 дней
$var1 = $var1.adddays(-30)
# перемещаем их
Dir | where {$_.lastwritetime -lt $var1} | move –destination “путь в склад”
call arxivSnaps.bat
…………………….
arxivSnaps.bat:
SET PATH=%PATH%;»C:\Program Files (x86)\WinRAR\»
rar a -agYYYYMMDD -y -r -idp arxiv путь в склад \* > arxiv.log
Формат запуска: ./ arxiv_rar.ps1
Почти аналог, спасибо 🙂
Добрый день,
Нужен срипт, который можно было бы запускать ежедневно и он бы архивировал конкретный файл (путь к файлу постоянный), а затем отправлял бы его по почте по конкретным адресам. Было бы неплохо, если бы скрипт еще и отрубал доступ к файлу (если у кого-то из пользователей на момент запуска скрипта файл открыт), т.е. архивировал бы последнюю сохраненную версию.
Сама в этом ничего не понимаю, поэтому, если есть что посоветовать, внимательно слушаю.
К сожалению я так и не смог выделить время, чтобы вам помочь. Придется разбираться самостоятельно, благо примеры необходимых скриптов приведены в моем блоге. По поводу отключения пользователей — в этом нет смысла, т.к. после отключения сессии клиент заново подключится и, возможно, начнет вносить изменения в файл. В данном случае следует воспользоваться VSS (Shadow Copy), но это уже работа с API ОС Windows Server и необходимость написания отдельного приложения 🙂