VBScript: переменная среды системы Windows, изменения не отображаются в приглашении CMD - PullRequest
2 голосов
/ 05 мая 2011

Я написал сценарий VB (.vbs) для добавления переменной системной среды Windows, как показано ниже,

set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\CATALINA_HOME", "C:\Tomcat5" , "REG_EXPAND_SZ"

Когда я вижу эту переменную среды в Свойства системы -> Дополнительно -> Диалоговое окно переменных среды , показывает, что переменная среды существует.

Но когда я запускаю командную строку и набираю там команду " set ", я не нахожу там переменную.(Я запустил новое приглашение CMD после выполнения VBS)

Некоторым образом, как приглашение CMD не получает изменения в переменной среды.

Если я перезагружаю машину, я могу получить доступ к переменной среды из приглашения CMD.Но я не хочу, чтобы пользователь перезагружал систему после выполнения моих vbs и работы в командной строке cmd.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

это потому, что вы «вставляете» постоянное значение в реестр, чтобы установить «живое» значение, используйте текущий код, для обеих целей используйте оба кода

  SET oShell = CREATEOBJECT("Wscript.Shell")
  SET wSystemEnv = oShell.Environment("SYSTEM")
  wSystemEnv("<Name>") = "<Value>"
  SET wSystemEnv = NOTHING
  SET oShell = NOTHING
2 голосов
/ 09 мая 2011

Спасибо, Луис!

На самом деле, добавление / изменение переменной окружения с использованием реестра является довольно грубым способом.Таким образом, мы можем создавать некоторые несоответствия.

Итак, идеальный способ сделать это - использовать коллекцию, которая посвящена переменным среды, WshEnvironment.

Теперь, как предложил ЛуисЯ написал следующий скрипт для добавления системной переменной среды:

Set wshshell = CreateObject("WScript.Shell")
Dim WshSySEnv
Set WshSysEnv = wshshell.Environment("SYSTEM")
WshSysEnv("1VINOD") = "1Vinod"
WshSysEnv("2VINOD") = "2Vinod"
Set WshSySEnv = Nothing

Сохраните этот код в файле VBS, запустите файл VBS.Теперь вы получите 2 переменные окружения в приглашении cmd без перезапуска системы .

Аналогичный скрипт для удаления переменных,

Set wshshell = CreateObject("WScript.Shell")
Dim WshSySEnv
Set WshSysEnv = wshshell.Environment("SYSTEM")
WshSysEnv.Remove("1VINOD") 
WshSysEnv.Remove("2VINOD") 
Set WshSySEnv = Nothing

Это также не требуетлюбые перезапуски / выход из системы.

Наслаждайтесь!

Я проверил это на XP, надеюсь, это работает и на Windows 7.

...