Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
WshShell.SendKeys(SPath+"{TAB}"+Status+"~");
//Приостанавливаем сценарий на 0,5 сек
WScript.Sleep(500);
Перейдем теперь к описанию функции LoopSubFolders(Fold). Сначала в этой функции удаляются временные файлы в каталоге Fold:
//Удаляем временные файлы из каталога Fold
DelFilesInFolder(Fold, ExtForDel);
Затем происходит удаление файлов во всех подкаталогах каталога Fold, причем делается это с помощью обращения для каждого подкаталога к той же функции LoopSubFolders:
//Создаем коллекцию подкаталогов
SubFolders = new Enumerator(Fold.SubFolders);
//Цикл по всем подкаталогам
while (!SubFolders.atEnd()) {
 //Вызываем рекурсивно функцию LoopSubFolders
В LoopSubFolders(SubFolders.item());
 //Переходим к следующему подкаталогу
В SubFolders.moveNext();
}
Полный текст сценария DelTmp.js приведен в листинге 5.17.
Листинг 5.17. Удаление всех временных файлов на диске D:/*******************************************************************/
/* РРјСЏ: DelTmp.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                  */
/* Описание: Удаление временных файлов во всех подкаталогах       */
/*          текущего каталога                                    */
/*******************************************************************/
//Объявляем глобальные переменные
var WshShell,FSO,Folder,
 ColTmp=0,       //Счетчик файлов для удаления
 ExtForDel="tmp"; //Расширение файлов, подлежащих удалению
//Рекурсивная функция для удаления временных файлов в каталоге Fold
function LoopSubFolders(Fold) {
В var SubFolders;
 //Удаляем временные файлы из каталога Fold
В DelFilesInFolder(Fold,ExtForDel);
 //Создаем коллекцию подкаталогов
В SubFolders = new Enumerator(Fold.SubFolders);
 //Цикл по всем подкаталогам
В while (!SubFolders.atEnd()) {
 //Вызываем рекурсивно функцию LoopSubFolders
В LoopSubFolders(SubFolders.item());
 //Переходим к следующему подкаталогу
В SubFolders.moveNext();
В }
}
//Функция для удаления файлов с расширением SExt в каталоге Fold
function DelFilesInFolder(Fold,SExt) {
 //Объявляем переменные
В var Files,s,SPath,FileExt,Status;
 //Создаем коллекцию всех файлов в каталоге Fold
В Files=new Enumerator(Fold.Files);
В s="";
 //Цикл по всем файлам
В while (!Files.atEnd()) {
 //Определяем путь к файлу
В SPath=Files.item().Path;
 //Выделяем расширение файла
В FileExt=FSO.GetExtensionName(SPath).toUpperCase();
 //Сравниваем расширение файла с расширением SExt
В if (FileExt==SExt.toUpperCase()) {
  ColTmp++; //Увеличиваем счетчик файлов для удаления
В В try {
В В В Status="Ok";
   //Пытаемся удалить файл
В В В //Files.item().Delete();
  } catch (e) { //Обрабатываем возможные ошибки
В В В if (e != 0) {
    //Произошла ошибка при удалении файла
В В В В Status="Busy";
В В В }
В В }
  //Заменяем специальные символы в названии файла
В В SPath=SPath.replace("~","{~}");
В В SPath=SPath.replace("+","{+}");
В В SPath=SPath.replace("^","{^}");
В В SPath=SPath.replace("%","{%}");
  //Посылаем название файла и результат его удаления
  //в Блокнот
В В WshShell.SendKeys(SPath+"{TAB}"+Status+"~");
  //Приостанавливаем сценарий на 0,5 сек
В В WScript.Sleep(500);
В }
 Files.moveNext(); //Переходим к следующему файлу
В }
}
/******************* Начало **********************************/
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
//Запускаем Блокнот
theNotepad = WshShell.Exec("Notepad");
//Приостанавливаем сценарий на 0,5 сек
WScript.Sleep(500);
//Активизируем окно Блокнота
WshShell.AppActivate(theNotepad.ProcessID);
//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Определяем каталог, с которого будет начато удаление файлов
Folder = FSO.GetFolder("D:\");
//Вызываем функцию LoopSubFolder для каталога Folder
LoopSubFolders(Folder);
//Формируем информацию о количестве обработанных файлов
SItog="Total: "+ColTmp+ " file(s)";
//Посылаем в Блокнот итоговую информацию
WshShell.SendKeys(SItog);
/************* Конец *********************************************/
Поиск файлов с использованием регyлярных выражений
Всем хорошо известно, что для поиска файлов и папок с помощью стандартных средств Windows в именах можно использовать подстановочные символы "?" (обозначает любой один символ) и "*" (обозначает любое число любых символов). Например, на рис. 5.12 представлен результат поиска файлов *.sys (все файлы с расширением sys) на диске С:.
Р РёСЃ. 5.12. Рспользование подстановочных символов РїСЂРё РїРѕРёСЃРєРµ файлов
В сценариях WSH можно производить поиск файлов (как и любого другого текста) с помощью гораздо более сложных правил для определения соответствий. Для этого используются регулярные выражения, которые определяют образец текста для поиска. Для задания этого образца используются литералы и метасимволы. Каждый символ, который не имеет специального значения в регулярных выражениях, рассматривается как литерал и должен точно совпасть при поиске. Метасимволы — это символы со специальным значением в регулярных выражениях. Описание наиболее часто используемых метасимволов приведено в табл. 5.14.