В процессе эксплуатации возникла новая фишка. Теперь оказалось, что если рекурсия натыкается на папку к которой у пользователя нет доступа, то он вылетает. Для исправления ситуации и продолжения работы скрипта, не глядя на эту папку, я решил добавить условие вида: if (path.StdErr == 0) - оно там есть в скрипте ниже. Но после этого скрипт виснет и жрет 50% ЦП!!! Я что, не правильно записал проверку ошибок?
//var wsh = new ActiveXObject("WScript.Shell");
//if( ! /cscript\.exe$/.test( WScript.FullName ) ) { // проверить что запущено в консольном режиме
// wsh.Run("cmd /c cscript " + WScript.ScriptName ); // если нет, перезапустить в консоли
// WScript.Quit(0); // и завершить текущую инкарнацию (пусть работает перезапущенный в консоли)
//}
// 1 Взято но не рабочее с сайта: [url]http://forum.oszone.net/nextnewesttothread-199998.html[/url]
// 2объект файловой системы
var fso = new ActiveXObject("Scripting.FileSystemObject");
// 4 путь к каталогу, откуда запускается скрипт
var path = WScript.ScriptFullName.substr(0, (WScript.ScriptFullName.length - WScript.ScriptName.length)),
p = fso.GetFolder(path);
var vsePapki = []; //Массив записей путей ко всем подпапкам.
var nomerProverki=0; //Количество провереных и обработанных папок.
var nomerZapisi=1; // Количество записанных папок в массив.
//12 Вызываем рекурсивную функцию
sFolders(path);
//14 Рекурсивная функция перебора всех папок и подпапок
function sFolders(folder)//полный путь
{
// 17 доступ к объекту-папке
var root = fso.GetFolder(folder);
// 19 Коллекция подпапок
var sfCount = root.SubFolders.Count;
// 21 последовательность подпапок
var seq = new Enumerator(root.SubFolders);
// WScript.Echo("\nКоличество подпапок в корневой папке (" + root + ") = " + sfCount);
// 24 если в текущей папке есть подпапки, то вызываем функцию для каждой подпапки рекурсивно.
while (sfCount>0)
{
for(; !seq.atEnd(); seq.moveNext())
{
// WScript.Echo("Путь к подпапке = " + seq.item().path);
vsePapki[nomerZapisi] = seq.item().path;
nomerZapisi=nomerZapisi+1; // Количество записей в массиве адресов
}
if (path.StdErr == 0) // КАК проверить будет ли ошибка у этой папки????
{
nomerProverki=nomerProverki+1;
WScript.Echo("Номер проверки = " + nomerProverki + " Номер записи = " + [nomerZapisi-1]);
if (nomerProverki>=nomerZapisi)
{
sfCount = 0;
}
else
{
WScript.Echo("ПАПКА НА ПРОВЕРКУ = " + vsePapki[nomerProverki]);
sfCount = sfCount - 1;
sFolders(vsePapki[nomerProverki]);
}
}
}
}
WScript.Sleep(99000);