Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
 SErrMess="Не найден каталог для хранения архивов "+SArch;
В return false;
В }
 //Если оба каталога существуют, возвращаем true
В return true;
}
Основной функцией, осуществляющей архивирование файлов, является FilesToArchiv(). В самом начале этой функции с помощью вызова CheckPath() проверяется наличие рабочих каталогов. Если хотя бы один из каталогов не существует, то выполнение FilesToArchiv() прерывается и возвращается значение false:
if (!CheckPath()) return false;
Затем создаются экземпляры объектов FileSystemObject и WshShell:
//Создаем объект FileSystemObject
FSO = new ActiveXObject("Scripting. FileSystemObject");
//Создаем объект WshShell
WshShell = new ActiveXObject("WScript.Shell");
РРјСЏ файла-архива формируется следующим образом:
//Формируем имя файла-архива
SFName=SPref+NowIs()+".arj";
Архиватор arj.exe мы будем запускать в отдельном командном окне, которое закроется после выполнения этой программы. Для этого мы сформируем командную строку SComLine, с помощью которой запускается вторичная копия командного процессора (путь к командному процессору хранится в переменной среды %COMSPEC%, вторичная копия вызывается с помощью ключа /с):
SComLine="%COMSPEC% /СЃ ";
Синтаксис запуска arj.exe для создания архивного файла имеет следующий вид:
arj.exe a Archiv Files
где Archiv — путь к файлу-архиву, Files — имена добавляемых в архив файлов (здесь можно использовать шаблонные символы ? и *). Поэтому мы добавим нужные компоненты к командной строке SComLine:
SComLine+=" arj.exe a "+FSO.BuildPath(SArch, SFName) + " ";
SComLine+= FSO.BuildPath(SFrom, SMask);
Команды, записанные в SComLine, запускаются с помощью метода Run объекта WshShell; код возврата сохраняется в переменной RetCode:
RetCode = WshShell.Run(SComLine, 1, true);
Равенство нулю переменной RetCode означает, что архивирование выполнено без ошибок — в этом случае функция FilesToArchiv() возвращает true. Если же при выполнении arj.exe возникла ошибка (переменная RetCode не равна нулю), то ее код вносится в сообщение об ошибке (свойство SErrMess):
//Анализируем код возврата для arj.exe
if (0==RetCode)
 //Выполнение arj.exe завершилось без ошибок
В return true;
else {
 //Формируем строку с информацией об ошибке
 SErrMess="Ошибка ARJ.EXE! Код "+RetCode;
В return false;
}В
Полностью содержимое файла DateArc.wsc приведено в листинге 10.4.
Листинг 10.4. СОМ-объект DateArc.WSC (JScript)<?xml version="1.0" encoding="windows-1251"?>
<component>
В <registration description="DateArc" progid="DateArc.WSC"
В version="1.00"
В classid="{424ac2bc-5732-4dea-be17-0211af99cd79}">
В <script language="JScript">
В <![CDATA[
var WshShell;
//Рнициализируем константы для диалоговых РѕРєРѕРЅ
var vbInformation=64;
function Register() {
 //Создаем объект WshShell
В WshShell = new ActiveXObject("WScript.Shell");
 WshShell.Popup("Компонент зарегистрирован в системе",0,
 "Компонент для архивирования файлов",vbInformation);
}
function Unregister() {
 //Создаем объект WshShell
В WshShell = new ActiveXObject("WScript.Shell");
 WshShell.Popup("Компонент удален из системы",0,
 "Компонент для архивирования файлов",vbInformation);
}
В В ]]>
В </script>
В </registration>
В <public>
В <property name="SFrom">
В В <get/>
В В <put/>
В </property>
В <property name="SArch">
В В <get/>
В В <put/>
В </property>
В <property name="SPref">
В В <get/>
В В <put/>
В </property>
В <property name="SMask">
В В <get/>
В В <put/>
В </property>
В <property name="SErrMess">
В В <get/>
В </property>
В <method name="FilesToArchiv">
В </method>
В </public>
В <script language="JScript">
В <![CDATA[
var description = new DateArc;
//Конструктор объекта DateArc
function DateArc()В В {
 //Объявляем свойства объекта DateArc
В this.get_SFrom = get_SFrom;
В this.put_SFrom = put_SFrom;
В this.get_SArch = get_SArch;
В this.put_SArch = put_SArch;
В this.get_SPref = get_SPref;
В this.put_SPref = put_SPref;
В this.get_SMask = get_SMask;
В this.put_SMask = put_SMask;
В this.get_SErrMess = get_SErrMess;
 //Объявляем метод FilesToArchiv
В this.FilesToArchiv = FilesToArchiv;
}
var SFrom,В В В //Рсходный каталог для архивирования
   SArch,   //Каталог, в котором будет создаваться архив
   SPref,   //Префикс файла
   SMask,   //Маска, по которой отбираются файлы для
             //архивирования
   SErrMess; //Текст сообщения об ошибке
//Чтение и запись свойства SFrom
function get_SFrom() {
В return SFrom;
}
function put_SFrom(newValue) {
В SFrom = newValue;
}
//Чтение и запись свойства SArch
function get_SArch() {
В return SArch;
}
function put_SArch(newValue) {
В SArch = newValue;
}
//Чтение и запись свойства SPref
function get_SPref() {
В return SPref;
}
function put_SPref(newValue) {
В SPref = newValue;
}
//Чтение и запись свойства SMask
function get_SMask() {
В return SMask;
}
function put_SMask(newValue) {
В SMask = newValue;
}
//Чтение свойства SErrMess
function get_SErrMess() {
В return SErrMess;
}
//Вспомогательная функция для символьного представления даты
function NowIs() {
В var d, s="", s1="";
 //Создаем объект Date (текущая дата)
В d=new Date();
 //Выделяем номер месяца
В s+=(d.getMonth()+1);
 //Если месяц представляется одним символом, добавляем слева "0"
В if (s.length==1) s="0"+s;
 //Выделяем в дате день
В s1+=d.getDate();