Объект WScript.Shell метод ExpandEnvironmentStrings и свойство CurrentDirectory — Переменные среды Windows и текущий каталог

Объект WScript.Shell метод ExpandEnvironmentStrings и свойство CurrentDirectory — Переменные среды Windows и текущий каталог Объектная модель Windows Script Host

Доброго времени суток всем гостям блога 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).

Windows переменные среды

Хорошо, с теорией разобрались, теперь давайте приступим к программированию. Для начала напишем программный код на языке 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 – код двойных кавычек.

Работа с переменными Windows средами

А вот аналогичный пример, но уже на языке 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.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий