Чтение онлайн

ЖАНРЫ

Windows Script Host для Windows 2000/XP

Попов Андрей Викторович

Шрифт:

в каждом подкаталоге ищутся все временные файлы с расширением tmp;

для каждого найденного временного файла производится попытка удаления. В случае успеха в Блокноте печатается путь к файлу и слово "OK", если же удаляемый файл занят, то печатается путь к файлу и слово "Busy" ("Занят");

после просмотра всех каталогов в Блокноте печатается общее количество найденных временных файлов (рис. 5.11).

Рис. 5.9. Список всех временных файлов на диске D:

Рис. 5.10.

Ошибка, возникающая при попытке удалить занятый файл 

Итак, наиболее важными в сценарии являются: функция

DelFilesInFolder(Fold, SExt)
, в которой происходит попытка удаления в каталоге Fold всех файлов, имеющих расширение
SExt
, и рекурсивная (т.е. содержащая обращение к самой себе) функция
LoopSubFolders(Fold)
, в которой происходит вызов функции
DelFilesInFolder
для подкаталогов каталога Fold.

Рис. 5.11. Результат работы сценария DelTmp.js

Рассмотрим сначала функцию

DelFilesInFolder(Fold, SExt)
. Здесь сначала создается объект
Enumerator
с именем
Files
для доступа к коллекции всех файлов в каталоге Fold:

var Files, s, SPath, FileExt, Status;

Files=new Enumerator(Fold.Files);

после чего все элементы коллекции просматриваются в цикле while:

s="";

//Цикл по всем файлам

while (!Files.atEnd) {

 …

 Files.moveNext; //Переходим к следующему файлу

}

Для текущего файла в коллекции выделяется его расширение, которое преобразуется к верхнему регистру:

//Определяем путь к файлу

SPath=Files.item.Path;

//Выделяем расширение файла

FileExt=FSO.GetExtensionName(SPath).toUpperCase;

В случае совпадения расширения

FileExt
с расширением
SExt
в блоке
try…catch
производится попытка удаления текущего файла:

ColTmp++; //Увеличиваем счетчик файлов для удаления

try {

 Status="Ok";

 //Пытаемся удалить файл

 Files.item.Delete;

} catch (e) {

 //Обрабатываем возможные ошибки

 if (е != 0) {

//Произошла ошибка при удалении файла

Status="Busy";

 }

}

Таким образом, в переменной

Status
будет записан результат удаления файла: "OK" в случае успеха, и "Busy"
в том случае, если удаляемый файл занят другим приложением. После этого полный путь к удаляемому файлу и значение переменной
Status
печатаются в окне Блокнота с помощью метода
SendKeys
объекта
WshShell
. Здесь только нужно учесть, что в имени файла могут встретиться символы, имеющие специальный смысл для метода
SendKeys
, поэтому предварительно нужно соответствующим образом заменить такие символы в имени файла:

//Заменяем специальные символы в названии файла

SPath=SPath.replace("~", "{-}");

SPath=SPath.replace("+", "{+}");

SPath=SPath.replace("^", "{^}");

SPath=SPath.replace("%", "{%}");

//Посылаем название файла и результат его удаления в Блокнот

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

Поделиться с друзьями: