petrovre
12-02-2011, 22:51
Задача: Есть папка, в которой присутствует некоторое неограниченное количество подпапок. Надо обойти их все и вывести на экран названия.
Проблема: Сделал такой вот скрипт, который вызывает рекурсивную функцию, но почему-то он обходит дерево подпапок только до первого листа, а потом заканчивает работу в штатном режиме, без каких-либо ошибочных кодов. Подскажите, где я ошибаюсь:
//объект файловой системы
var fso = new ActiveXObject("Scripting.FileSystemObject");
//путь к каталогу, откуда запускается скрипт
var path = WScript.ScriptFullName.substr(0, (WScript.ScriptFullName.length - WScript.ScriptName.length)),
p = fso.GetFolder(path);
//Вызываем рекурсивную функцию
sFolders(path);
//Собственно рекурсивная функция
function sFolders(folder)//полный путь
{
//доступ к объекту-папке
root = fso.GetFolder(folder);
//Коллекция подпапок
sfCount = root.SubFolders.Count;
//последовательность подпапок
seq = new Enumerator(root.SubFolders)
WScript.Echo("\nКоличество подпапок в корневой папке (" + root + ") = " + sfCount)
//если в текущей папке есть подпапки, то вызываем функцию для каждой подпапки рекурсивно.
if(sfCount > 0)
for(; !seq.atEnd(); seq.moveNext())
{
WScript.Echo("Путь к подпапке = " + seq.item().path)
//вызываем функцию рекурсивно
sFolders(seq.item().path);
}
}
На данный момент ситуация такова, что если мы имеем такую структуру папок:
- "Тест"
--- "1"
------ "1-1"
--- "2"
------ "2-1"
То скрипт отрабатывает вплоть до папки "1-1", а после этого заканчивает работу, т.е. создаётся ощущение, что не срабатывает метод seq.moveNext().
Проблема: Сделал такой вот скрипт, который вызывает рекурсивную функцию, но почему-то он обходит дерево подпапок только до первого листа, а потом заканчивает работу в штатном режиме, без каких-либо ошибочных кодов. Подскажите, где я ошибаюсь:
//объект файловой системы
var fso = new ActiveXObject("Scripting.FileSystemObject");
//путь к каталогу, откуда запускается скрипт
var path = WScript.ScriptFullName.substr(0, (WScript.ScriptFullName.length - WScript.ScriptName.length)),
p = fso.GetFolder(path);
//Вызываем рекурсивную функцию
sFolders(path);
//Собственно рекурсивная функция
function sFolders(folder)//полный путь
{
//доступ к объекту-папке
root = fso.GetFolder(folder);
//Коллекция подпапок
sfCount = root.SubFolders.Count;
//последовательность подпапок
seq = new Enumerator(root.SubFolders)
WScript.Echo("\nКоличество подпапок в корневой папке (" + root + ") = " + sfCount)
//если в текущей папке есть подпапки, то вызываем функцию для каждой подпапки рекурсивно.
if(sfCount > 0)
for(; !seq.atEnd(); seq.moveNext())
{
WScript.Echo("Путь к подпапке = " + seq.item().path)
//вызываем функцию рекурсивно
sFolders(seq.item().path);
}
}
На данный момент ситуация такова, что если мы имеем такую структуру папок:
- "Тест"
--- "1"
------ "1-1"
--- "2"
------ "2-1"
То скрипт отрабатывает вплоть до папки "1-1", а после этого заканчивает работу, т.е. создаётся ощущение, что не срабатывает метод seq.moveNext().