В одной из предыдущих затрагивалась тема работы с файловой системой вообще и с файлами и каталогами в частности. Однако, при рассмотрении этого вопроса объяснялось как работать с одним файлом или одним каталогом. Зачастую, этого бывает недостаточно, особенно, когда нужно совершить какие-то действия со всеми файлами из определенного каталога и их имена не известны (довольно распространенная задача). Для этого случая в Windows Script Host есть возможность работы с коллекциями файлов и каталогов.
Сперва рассмотрим работу с каталогами. Список каталогов хранится в коллекции Folders, получить которую можно с помощью свойства SubFolders объекта Folder (может немного запутанно, но в приведенном ниже примере все станет ясно). Folders имеет свойство Count и методы Item и Add. Вот небольшой пример на JScript, выводящий список имен всех папок на диске С:, демонстрирующий как работать с коллекцией Folders:
var fso, f, fc, fc1, s; fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.GetFolder("C:"); fc = new Enumerator(f.SubFolders); fc1 = f.SubFolders; s = ""; for (; !fc.atEnd(); fc.moveNext()) { s += fc.item(); s += "\n"; } s = s + "Всего папок: " + fc1.Count; WScript.Echo(s);
Аналогично на VBScript:
Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("C:") Set fc = f.SubFolders For Each f1 in fc s = s & f1.name s = s & CHR(10) Next s = s & "Всего папок: " & fc.Count WScript.Echo s
Для иллюстрации метода Add приведу небольшой пример на JScript:
var fso, f, fc; fso = WScript.CreateObject("Scripting.FileSystemObject"); f = fso.GetFolder("C:"); fc = f.SubFolders; fc.Add("NewFolder");
Этот метод позволяет создать новую папку с именем, заданным в качестве параметра, в указанной вами директории.
Конечно, данные примеры вряд ли найдут практическое применение, но для иллюстрации работы с каталогами этого вполне достаточно.