//Объявляем переменные
var
FSO, //Экземпляр объекта FileSystemObject
WshShell, //Экземпляр объекта WshShell
WshFldrs, //Экземпляр объекта WshSpecialFolders
PathStartup, //Путь к папке выборочной автозагрузки
Folder, //Экземпляр объекта Folder для папки
//выборочной автозагрузки
Files, //Коллекция файлов в папке выборочной автозагрузки
File, //Экземпляр объекта File для ярлыка в папке
//выборочной автозагрузки
Res, //Результат нажатия кнопок в диалоговых окнах
IsRunAll; //Логический флаг, указывающий, надо ли запустить
//сразу все программы из автозагрузки
//Инициализируем константы для диалоговых окон
var vbYesNo=4,vbQuestion=32,vbYes=6,vbOkOnly=0,vbMinimizedFocus=2;
//Создаем объект WshShell
WshShell=WScript.CreateObject('Wscript.Shell');
//Создаем объект WshSpecialFolders
WshFldrs=WshShell.SpecialFolders;
//Определяем путь к папке выборочной автозагрузки
PathStartup=WshFldrs.item('AllUsersStartMenu')+'\Выборочная автозагрузка\';
//Создаем объект FileSystemObject
FSO=WScript.CreateObject('Scripting.FileSystemObject');
//Создаем объект Folder для папки выборочной автозагрузки
Folder=FSO.GetFolder(PathStartup);
//Создаем коллекцию файлов каталога выборочной автозагрузки
Files=new Enumerator(Folder.Files);
//Выводим запрос на запуск сразу всех программ
Res=WshShell.Popup('Запустить сразу все программы?',0,
'Выборочная автозагрузка',vbQuestion+vbYesNo);
//Определяем, нажата ли кнопка Да
IsRunAll=(Res==vbYes);
//Цикл по всем файлам каталога выборочной автозагрузки
while (!Files.atEnd()) {
//Создаем объект File для текущего элемента коллекции
File=Files.item();
//Обнуляем переменную Res
Res=0;
if (!IsRunAll) //Программы нужно запускать по одной
//Выводим запрос на запуск одной программы
Res=WshShell.Popup('Запустить '+File.Name+'?',0,
'Выборочная автозагрузка',vbQuestion+vbYesNo);
if ((IsRunAll) || (Res==vbYes))
//Запускаем текущую программу в минимизированном окне
WshShell.Run('''+File.Path+''',vbMinimizedFocus);
//Переходим к следующему файлу в коллекции
Files.moveNext();
}
/************* Конец *********************************************/
Резервное копирование документов пользователя при окончании сеанса работы
Для каждого пользователя Windows ХР в каталоге Documents and Settings автоматически создается личная папка, имя которой совпадает с именем этого пользователя. В подкаталоге 'Мои документы' (My Documents) этой папки по умолчанию сохраняются все созданные пользователем документы. Для того чтобы всегда иметь резервную копию документов пользователей, можно написать универсальный сценарий выхода, в котором будет происходить копирование всех файлов и подкаталогов из пользовательского каталога 'Мои документы' в другой каталог с именем пользователя. В нашем примере резервные копии документов будут сохраняться в каталоге D:Backup, т.е. при выходе пользователя Popov все его документы скопируются в каталог D:BackupPopov, а при выходе пользователя Kazakov — в каталог D:Backup Kazakov.
Самым быстрым решением поставленной задачи является создание командного файла Logoff.bat (листинг 11.11) и назначение его в качестве сценария выхода для всех пользователей. Результат работы этого пакетного файла будет виден в командном окне (рис. 11.20).
@ECHO OFF
REM Имя: Logoff.bat
REM Описание: BAT-файл, выполняющий резервное копирование
REM документов пользователя
ECHO Окончание сеанса пользователя %UserName%.
ECHO.
ECHO Начинаем копирование документов в каталог D:Backup\%UserName%...
XCOPY /C /D /E /I /Y '%HomeDrive%%HomePath%Мои документы' D:Backup\%UserName %
ECHO.
ECHO Копирование документов завершено.
PAUSE
Как мы видим, вся работа файла Logoff.bat заключается в вызове команды XCOPY
для нужных каталогов:
XCOPY /С /D /Е /I /Y '%HomeDrive%%HomePath%Мои документы' 'D:Backup\%UserName %'
Рис. 11.20. Результат работы сценария выхода Logoff.bat для пользователя Popov
Здесь для XCOPY
указаны несколько ключей, которые позволяют:
? не прерывать копирование при возникновении ошибки (ключ /С
);
? копировать только те файлы, которые были изменены (ключ /D
);
? копировать все подкаталоги, включая пустые (ключ /Е
);
? создавать, при необходимости, каталог, в который производится копирование (ключ /I
);
? перезаписывать файлы без подтверждения пользователя (ключ /Y).