Всем доброго дня, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим работу с переменными окружения Windows, а именно: теоретические основы и программный код для написания сценариев.
Переменные окружения Windows – теоретические основы
Переменные среды – Это по своей природе простые текстовые строки, которые позволяют хранить системную или пользовательскую информацию. Оны нужны, что бы быстро получить доступ к нужному ресурсу в операционной системе windows или системному значению. Все среды разделяют на два типа:
- Системные – Данный тип создается автоматически операционной системой, они доступны для всех пользователей. Информация хранится в реестре, в большинстве случаев, что бы изменения вступили в силу, нужно произвести перезапуск операционной системы.
- Пользовательские – Данный тип создается конкретным пользователей, поэтому информация доступна в большинстве случаев только для того пользователя, которые ее записал. В отличии от системных сред, пользовательские переменные окружения ОС Windows вступают сразу в силу, однако, нужно перезапустить те приложения, которые будут их использовать.

Доступ к средам в Windows XP осуществляется через значок «мой компьютер«: нажимаем правой кнопкой мыши по значку и из контекстного меню выбираем пункт "Свойства», далее переходим на вкладку «Дополнительно» и там нажимаем на кнопку «переменные_среды«. Частично, работу с переменными окружения Windows я рассмотрел в статье «Урок 4 по CMD — переменные окружения«.
Переменные среды Windows – практическая часть

Хорошо, теперь давайте перейдем непосредственно к основной части статьи. Мы рассмотрим объект WScript.Shell, его свойство Environment позволяет работать с переменными окружения Windows:
Environment([strType]) – По умолчанию, данное свойство предоставляет доступ ко всем переменным окружения Windows типа System, но можно задать и другой тип, их всего четыре:
- "System" – системные переменные_среды, создаются самой операционной системой Windows.
- "User" – переменные_среды пользователя.
- "Volatile" – временные_переменные.
- "Process" – переменные_среды текущего командного окна.
И так, переменная среда Windows, это переменная, которая хранится в самой системе, она может быть временной, системной или, может быть создана пользователем. Так, благодаря переменным окружения Windows мы можем через меню Пуск/Выполнить запускать командную строку или калькулятор (все то, что лежит в системных каталогах) не вводя полного пути. Также, Windows переменные окружения хранят информацию о процессоре, профиле пользователя и многое другое.
Давайте напишем простой сценарий на языке vbscript для лучшего понимания ситуации:
'********************************************* ' wscript_shell_environment ' Переменные среды Windows ' environment.vbs '********************************************** Option Explicit dim WshShell, index dim WshEnvirSys, WshEnvirUsr, WshEnvirVol, WshEnvirProc dim s, u, v, p s = "" v = "" u = "" p = "" ' формируем ссылку на объект set WshShell = WScript.CreateObject("WScript.Shell") ' тип SYSTEM set WshEnvirSys = WshShell.Environment ' тип USER set WshEnvirUsr = WshShell.Environment("USER") ' тип VOLATILE set WshEnvirVol = WshShell.Environment("VOLATILE") ' тип PROCESS set WshEnvirProc = WshShell.Environment("PROCESS") For Each index In WshEnvirSys s = s & index & vbCrLf Next For Each index In WshEnvirUsr u = u & index & vbCrLf Next For Each index In WshEnvirVol v = v & index & vbCrLf Next For Each index In WshEnvirProc p = p & index & vbCrLf Next MsgBox "Системные:" & vbCrLf & vbCrLf& s MsgBox "Пользовательские:" & vbCrLf & vbCrLf & u MsgBox "Временные:" & vbCrLf & vbCrLf & v MsgBox "Текущий процесс:" & vbCrLf & vbCrLf & p |
Видим, что WshShell хранит ссылку на объект WScript.Shell, WshEnvirSys хранит ссылку на коллекцию переменных окружения Windows типа SYSTEM, WshEnvirUsr – USER, WshEnvirVol – VOLATILE и WshEnvirProc – PROCESS. Видим, что при создании ссылки на объект или коллекцию в языке vbscript используется ключевое слово set. Далее мы используем цикл For Each для перебора элементов коллекции и формирования списка. Списки выводятся в конце сценария с помощью функции MsgBox.
А вот аналогичный пример, но уже на языке jscript:
//********************************************* // wscript_shell_environment // Переменные среды Windows // environment.js //********************************************** var WshShell2; var WshEnvirSys, WshEnvirUsr1, WshEnvirVol, WshEnvirProc; var s="", u="", v="", p=""; // формируем ссылку на объект WshShell2 = WScript.CreateObject("WScript.Shell") // тип SYSTEM WshEnvirSys = new Enumerator(WshShell2.Environment("SYSTEM")); // тип USER WshEnvirUsr1 = new Enumerator(WshShell2.Environment("USER")); // тип VOLATILE WshEnvirVol = new Enumerator(WshShell2.Environment("VOLATILE")); // тип PROCESS WshEnvirProc = new Enumerator(WshShell2.Environment("PROCESS")); for (; !WshEnvirSys.atEnd(); WshEnvirSys.moveNext()) s+=WshEnvirSys.item()+"\n"; for (; !WshEnvirUsr1.atEnd(); WshEnvirUsr1.moveNext()) u+=WshEnvirUsr1.item()+"\n"; for (; !WshEnvirVol.atEnd(); WshEnvirVol.moveNext()) v+=WshEnvirVol.item()+"\n"; for (; !WshEnvirProc.atEnd(); WshEnvirProc.moveNext()) p+=WshEnvirProc.item()+"\n"; WScript.Echo ( "Системные:\n\n" + s); WScript.Echo ( "Пользовательские:\n\n" + u); WScript.Echo ( "Временные:\n\n" + v); WScript.Echo ( "Текущий процесс:\n\n" + p); |
Хорошо, у коллекции wscript shell environment есть свойство length, которое хранит в себе число всех элементов, метод Remove(strName) позволяет удалить переменную окружения ОС Windows, которая задана строковым параметром strName.
Хорошо, давайте рассмотрим следующий пример на языке vbscript:
'********************************************* ' wscript_shell_environment ' Переменные окружения ОС Windows ' environment_1.vbs '********************************************** Option Explicit dim WshShell1, index, u dim WshEnvirUsr, WshEnvirProc ' формируем ссылку на объект set WshShell1 = WScript.CreateObject("WScript.Shell") set WshEnvirUsr = WshShell1.Environment("USER") u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf For Each index In WshEnvirUsr u = u & index & vbCrLf Next MsgBox u '************************************************************************ ' Создаем переменную_окружения с именем my_usr_var ' и значением "простой текст" '************************************************************************ WshEnvirUsr("my_usr_var") = "простой текст" u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf For Each index In WshEnvirUsr u = u & index & vbCrLf Next MsgBox u '*********************************** ' Удаляем my_usr_var '*********************************** WshEnvirUsr.Remove("my_usr_var") u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf For Each index In WshEnvirUsr u = u & index & vbCrLf Next MsgBox u |
В этом примере по wscript shell environment свойству мы создали собственную переменную среду my_usr_var, записав в нее текстовую строку. Перед этим, мы вывели общее количество всех сред.
А вот аналогичный пример на языке jscript:
//********************************************* // wscript_shell_environment // Переменные окружения ОС Windows // environment_1.js //********************************************** var WshShell1, u var WshEnvirUsr2, WshEnvirProc // формируем ссылку на объект WshShell1 = WScript.CreateObject("WScript.Shell"); WshEnvirUsr2 = WshShell1.Environment("USER"); WshEnum = new Enumerator (WshEnvirUsr2); u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n"; for (; !WshEnum.atEnd(); WshEnum.moveNext()) u+=WshEnum.item()+"\n"; WScript.Echo (u); //************************************************************************ // Создаем переменную_окружения с именем my_usr_var // и значением "простой текст" //************************************************************************ WshEnvirUsr2("my_usr_var_1") = "простой текст"; WshEnum = new Enumerator (WshEnvirUsr2); u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n"; for (; !WshEnum.atEnd(); WshEnum.moveNext()) u+=WshEnum.item()+"\n"; WScript.Echo (u); //*********************************** // Удаляем my_usr_var //*********************************** WshEnvirUsr2.Remove("my_usr_var_1"); WshEnum = new Enumerator (WshEnvirUsr2); u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n"; for (; !WshEnum.atEnd(); WshEnum.moveNext()) u+=WshEnum.item()+"\n"; WScript.Echo (u); |
И так, в этой статье мы рассмотрели работу со свойством Environment класса WScript.Shell. Подписывайтесь на обновление блога, что бы быть в курсе новых материалов.