Istniejące odpowiedzi są pomocne, ale pozwól mi próba pragmatyczne podsumowanie:
Zazwyczaj chcesz bieżącego procesu definicji zmienną środowiska:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
jest to równoważnik kwasu (zauważyć nieobecność %
aro und zmienna nazwa):
CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
Zastrzeżenie: Nie pominąć ("Process)
udział: jeśli to zrobisz, dostaniesz definicję systemu zakres w zmiennej; patrz poniżej.
.ExpandEnvironmentStrings
jest koncepcyjnie prostsze i bardziej elastyczne: To może rozwinąć dowolne struny osadzone (%
-enclosed) odniesienia dla środowiska zmienna; np .:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
W rzadkich przypadkach może być dostępu definicje zmiennych środowiskowych z szczegółowego zakresu (inny niż obecny proces'S).
sScope = "System" ' May be: "Process", "User", "Volatile", "System"
CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")
Uwaga: Jak podano powyżej, pomijając wartości domyślne argumentów zakres zakresu System
.
Zastrzeżenie: Dostęp do wartości w ten sposób nie rozwinąć to: wartości Środowisko-zmienne mogą być zagnieżdżona: mogą odnosić się do innych zmiennych środowiskowych.
W powyższym przykładzie zwrócona wartość to %SystemRoot%\TEMP
, która zawiera nierozwinięte odniesienie do %SystemRoot%
.
Aby powiększyć wynik, należy go przekazać na .ExpandEnvironmentStrings()
, jak pokazano powyżej.
Obiekt zwrócony przez obiekt "CreateObject" ("WScript.Network" '] (https://msdn.microsoft.com/en-us/library/s6wt333f (v = vs.84) .aspx) nie zapewnia generycznego dostęp do zmiennych środowiskowych, po prostu wydaje się, że 3 wartości są właściwościami, które są również odzwierciedlone w zmiennych środowiskowych: 'NazwaKomputera',' NazwaUżytkownika' i 'NazwaUżytkownika' .Ale powód, że twój ostatni przykład nie działa, to' WshShell. Środowisko "jest takie samo jak' WshShell.Environment ("System") ', a'% USERNAME% 'nie jest zdefiniowany w zasięgu _system_. – mklement0