Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы изучим свойство объекта WScript Shell SpecialFolders, которое позволяет взаимодействовать с системными папками Windows.
Специальные паки или системные папки Windows – это каталоги типа Шрифты, Мои Документы текущего пользователя или Главное меню (Пуск). Частично, работу с системными папками Windows я рассмотрел в статье «Объект FileSystemObject метод GetSpecialFоldеr«.
Системные папки Windows
Свойство SреcialFolders класса WScript_Shell предоставляет доступ к коллекции, у которой есть свойство length и count, а также метод item. Оба свойства (length и и count) выполняют идентичную задачу – они позволяют получить общее количество всех элементов коллекции. Метод item(str) позволяет получить информацию о текущем элементе (параметр str) коллекции.
Прежде всего, давайте рассмотрим, какие есть системные (специальные) папки Windows:
- Desktop — Рабочий стол
- Favorites — Меню Избранное
- Fonts – Каталог со шрифтами
- MyDocuments –Мои документы
- NetHood — Пустая директория, используемая в качестве шаблона для сетевой среды.
- PrintHood — Пустая директория, используемая для отображения принтеров в сети.
- Programs — Подменю Программы меню Пуск
- Recent — Каталог со списком последних открываемых документов
- SendTo — Указывает на каталог SendTo.
- StartMenu — Главное меню (Пуск)
- Startup — Автозагрузка
- Templates — Директория ShellNew, содержащая шаблоны для создаваемых файлов.
Хорошо, с теорией мы закончили, теперь можно приступить к программированию. Для начала напишем сценарий на языке vbscript:
' *********************************************************** ' wscript_shell_specialFolders ' Выводим список всех системных папок Windows ' special.vbs '************************************************************ Option Explicit Dim SpecObj, WshShell Dim list_1, list_2, index, i list_1 = "Список системных папок Windows:" & vbCrLf & vbCrLf list_2 = "Список системных папок Windows:" & vbCrLf & vbCrLf ' Создаем ссылку на класс WScript_Shell set WshShell = WScript.CreateObject("WScript.Shell") ' Создаем ссылку на коллекцию SpecialFоldеrs set SpecObj = WshShell.SpecialFolders ' Используем пройстой цикл for i=0 to SpecObj.Count-1 list_1 = list_1 & SpecObj(i) & vbCrLf next MsgBox list_1 ' Используем специальный цикл For Each index In WshShell.SpecialFolders list_2 = list_2 & index & vbCrLf Next MsgBox list_2 |
В этом примере используются два цикла для получения списка всех системных папок Windows. Первый цикл является стандартным, в нем мы указали переменную i, задали ей начальное значение – 0 и прописали условие окончания: SpесОbj.Count-1, тут SpесОbj является переменной, которая хранит в себе ссылку на коллекцию SpecialFоlders класса WScript_Shell. Так как нумерация элементов коллекции начинается с нуля, то мы приписали Count-1, что практически означает – общее количество минус 1. Вместо свойства Count мы могли использовать и length для определения количества всех элементов. Второй цикл также позволяет получить все системные папки Windows, но он является специализированным, и используется в том случае, когда начальное и конечное значения не известны. Оба подхода вернут одинаковый результат.
Также видим, что сначала мы создали ссылку на объект WScript.Shell – она хранится в переменной WshShell, перед переменной находится ключевое слово set. Используя переменную WshShell, мы обратились к свойству SpесialFolders WScript_Shell объекта, тем самым получили доступ к коллекции.
Теперь давайте рассмотрим аналогичный пример, но уже на языкеjscript.
// *********************************************************** // wscript_shell_specialFolders // Выводим список всех системных папок Windows // special.js //************************************************************ var SpecObj, WshShell, col; var list_1, list_2, index, i; list_1 = "Список системных папок Windows:\n\n"; list_2 = "Список системных папок Windows:\n\n"; // Создаем ссылку на класс WScript_Shell WshShell = WScript.CreateObject("WScript.Shell"); // Создаем ссылку на коллекцию SресialFolders SpecObj = WshShell.SpecialFolders; // Объект Enumerator col = new Enumerator(SpecObj); // Используем пройстой цикл for (i=0; i<=SpecObj.Length-1; i++){ list_1+=SpecObj(i) + "\n"; } WScript.Echo(list_1); // Используем специальный цикл for (; !col.atEnd(); col.moveNext()) list_2+=col.item()+"\n"; WScript.Echo(list_2); |
Тут нам пришлось использовать объект Enumerator языка jscript, что бы обработать коллекцию. Как и в предыдущем примере, тут я использовал два цикла – стандартный и специализированный. Системные папки Windows.
Хорошо, теперь давайте рассмотрим еще такой пример.
' *********************************************************** ' wscript_shell_specialFolders ' Использование метода item ' Системные папки ОС Windows ' special_1.vbs '************************************************************ Option Explicit Dim SpecObj, WshShell, list ' Создаем ссылку на класс WScript_Shell set WshShell = WScript.CreateObject("WScript.Shell") ' Создаем ссылку на коллекцию SреcialFolders set SpecObj = WshShell.SpecialFolders ' рабочий стол list = SpecObj.item("Desktop") & vbCrLf ' шрифты list = list & SpecObj.item("Fonts") & vbCrLf ' меню Пуск list = list & SpecObj.item("StartMenu") & vbCrLf ' подменю Программы list = list & SpecObj.item("Programs") MsgBox list |
В этом примере с помощью метода item мы получили полный путь к заданным системным папкам Windows.
Вот аналогичный пример на языке jscript:
// *********************************************************** // wscript_shell_specialFolders // Использование метода item // Системные папки ОС Windows // special_1.js //************************************************************ var SpecObj, WshShell, list; // Создаем ссылку на класс WScript_Shell WshShell = WScript.CreateObject("WScript.Shell"); // Создаем ссылку на коллекцию SресialFolders SpecObj = WshShell.SpecialFolders; // рабочий стол list = SpecObj.item("Desktop") + "\n" // шрифты list+= SpecObj.item("Fonts") + "\n" // меню Пуск list+= SpecObj.item("StartMenu") + "\n" // подменю Программы list+= SpecObj.item("Programs") WScript.Echo(list); |
И так, в этой статье мы рассмотрели системные папки Windows, а точнее метод SpecialFolders объекта Wscript_Shell.