Доброго времени суток всем гостям блога scriptcoding.ru. В данной статье будет рассмотрен метод ExpandEnvironmentStrings и свойство CurrentDirectory класса WScript_Shell.
Давайте для начала рассмотрим теоретические основы, а уже потом займемся программированием. Как мы помним из прошлых уроков, прежде всего нам нужно создать ссылку на класс WScript_Shell:
Язык VBScript:
Set WshShel1 = WScript.CreateObject("WScript.Shell") |
Язык JScript:
WshShel1 = WScript.CreateObject("WScript.Shell"); |
В данном случае, для создания ссылки на объект мы используем функцию CreateObject, видим, что для языка VBScript нужно дополнительно прописывать ключевое слово set.
ExpandEnvironmentStrings(strString) – Данные метод ExpandEnvironmentStrings позволяет работать с переменными средами Windows. Метод содержит только один строковой параметр, в котором указывается имя переменной Windows среды (переменные_среды могут создаваться как пользователем, так и системой). ТутstrString является названием переменной среды Windows, которое должно заключаться в символ процента (%). При обзоре метода Environment я уже рассматривал работу с переменными_окружения.
Имена некоторых переменных сред Windows полезно знать:
- WINDIR – путь к папке Windows.
- PATH – путь для поиска исполняемых файлов.
- PATHEXT – список расширений файлов, которые рассматриваются как исполняемые.
CurrentDirectory – Данное свойство хранит полный путь к текущему сценарию. Стоит учитывать один момент, что, если путь содержит пробелы, то при попытке использовать данное свойство для запуска текущего сценария возникнет ошибка. В таких случаях путь должен быть с обеих сторон заключен в двойные кавычки, но есть одна проблема, язык vbscript не позволяет экранировать двойную кавычку, в отличии от JScript. Поэтому, тут нужно применить функцию Chr с кодом 34 (Урок 12 по VBScript: Строковые функции vbs).
Хорошо, с теорией разобрались, теперь давайте приступим к программированию. Для начала напишем программный код на языке VBScript:
'************************************************************************* ' Метод ExpandEnvironmentStrings и свойство CurrentDirectory ' Windows переменные среды и текущий каталог ' expandenvironmentstrings.vbs '************************************************************************** Option Explicit dim WshShell1, list, cur_dir, res ' формируем ссылку на объект set WshShell1 = WScript.CreateObject("WScript.Shell") With WshShell1 ' текущий каталог cur_dir = .CurrentDirectory ' папка Windows и исполняемые файлы list = .ExpandEnvironmentStrings("%WinDir%") & vbCrLf & .ExpandEnvironmentStrings("%Path%") & vbCrLf ' расширения и текущий каталог list = list & .ExpandEnvironmentStrings("%PathExt%") & vbCrLf & cur_dir End With 'Список заданных Windows переменных сред MsgBox list ' Запрашиваем у пользователя разрешение на запуск текущей копии сценария res = MsgBox("Запустить еще раз сценарий ?", vbYesNo + vbQuestion + vbDefaultButton2, "Запуск сценария") If res = vbYes Then WshShell1.Run(chr(34) & cur_dir & "\" & WScript.ScriptName & chr(34)) End If |
В этом примере мы сначала создаём ссылку на нужный класс, которая будет храниться в WshShell1. Далее в cur_dir сохраняем путь к текущему сценарию. В блоке with мы записываем данные вlist, которая хранит информацию о трех Windows переменных средах и путь к текущему сценарию. Далее, с помощью метода MsgBox мы выводим диалоговое окно – если пользователь нажмет ОК, то произойдёт повторный запуск текущего скрипта с помощью функции Run, в противном случае, работа скрипта завершиться. Видим, что для вставки кавычек мы использовали chr(34), тут 34 – код двойных кавычек.
А вот аналогичный пример, но уже на языке jscript:
//************************************************************************* // Метод ExpandEnvironmentStrings и свойство CurrentDirectory // Windows переменные среды и текущий каталог // expandenvironmentstrings.js //************************************************************************* var WshShell, list1="", cur_dir1, res; var vbOKCancel = 1, vbInformation = 64; // формируем ссылку на объект WshShell = WScript.CreateObject("WScript.Shell"); with(WshShell){ // текущий каталог cur_dir1 = CurrentDirectory; // папка Windows и исполняемые файлы list1+= ExpandEnvironmentStrings("%WinDir%") + "\n" + ExpandEnvironmentStrings("%Path%") + "\n"; // расширения и текущий каталог list1+= ExpandEnvironmentStrings("%PathExt%") + "\n" + cur_dir1; } //Список заданных переменных окружения WScript.Echo(list1); // Запрашиваем у пользователя разрешение на запуск текущей копии сценария res = WshShell.Popup("Запустить еще раз сценарий ?", 5, "Запуск сценария", vbOKCancel + vbInformation); if (res ==1){ WshShell.Run("\"" + cur_dir1 + "\\" + WScript.ScriptName + "\""); } |
Тут вместо функции MsgBox мы использовали функцию Popup объекта Wscript_Shell, а для экранирования кавычек применили ESC-последовательность. В остальном, особых изменений нет, разве что… нам пришлось объявить дополнительные константы vbOKCancel и vbInformation, так как они определены по умолчанию только для языка VBScript.