Перейдем теперь к описанию функции LoopSubFolders(
. Сначала в этой функции удаляются временные файлы в каталоге 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.
/*******************************************************************/
/* Имя: 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("%","{%}");