Все существующие ответы полезны, но позвольте мне попробовать прагматическое резюме :
Обычно требуется определение текущего процесса *1007* переменной окружения :
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
Это эквивалент (обратите внимание на отсутствие %
вокруг имени переменной):
CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
Предупреждение : Не пропускайте часть ("Process)
: если вы это сделаете, вы получите определение переменной system scope; см. ниже.
.ExpandEnvironmentStrings
концептуально проще и более гибок : он может расширять произвольных строк с внедренными (%
-накрытыми) ссылками переменных среды; e.g.:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
В редких случаях вам может потребоваться получить доступ к определениям переменных среды из определенной области (кроме текущего процесса).
sScope = "System" ' May be: "Process", "User", "Volatile", "System"
CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")
Примечание. Как указано выше, для аргумента scope по умолчанию используется область System
.
Предостережение : такой способ доступа к значению не не расширяет it: значения переменных среды могут быть вложенными : они могут ссылаться на other переменные окружения.
В приведенном выше примере возвращаемое значение равно %SystemRoot%\TEMP
, которое содержит нерасширенную ссылку на %SystemRoot%
.
Чтобы расширить результат, передайте его в .ExpandEnvironmentStrings()
, как показано выше.