【问题标题】:VBScript : Windows System enviroment variable, changes not getting reflected in CMD promptVBScript:Windows 系统环境变量,更改未反映在 CMD 提示符中
【发布时间】:2011-05-05 13:19:06
【问题描述】:

我写了一个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”命令时,我在那里找不到变量。 (我在执行 VBS 后启动了新的 CMD 提示)

有些 CMD 提示没有得到环境变量的变化。

如果我重新启动机器,那么我可以从 CMD 提示符访问环境变量。但是,我不希望用户在执行我的 vbs 并在 cmd 提示符下工作后重新启动系统。

有什么想法吗?

【问题讨论】:

  • 我没有测试,但我确信在上面的代码中注销/登录就足够了。
  • 甚至不需要登录/注销,执行 VB 脚本后,您只需打开“系统属性 -> 高级 -> 环境变量对话框”,然后按确定按钮即可。下次打开 cmd promt 时,您将看到在 VBS 中设置的 env 变量。但是,我不希望用户玩这样的把戏......

标签: vbscript environment-variables command-prompt


【解决方案1】:

那是因为你在注册表中“插入”了一个永久值,设置一个“实时”值使用流动代码,因为这两个提议都使用两个代码

  SET oShell = CREATEOBJECT("Wscript.Shell")
  SET wSystemEnv = oShell.Environment("SYSTEM")
  wSystemEnv("<Name>") = "<Value>"
  SET wSystemEnv = NOTHING
  SET oShell = NOTHING

【讨论】:

    【解决方案2】:

    谢谢路易斯!

    实际上,使用注册表添加/修改环境变量有点原始的方式。这样做可能会造成一些不一致。

    因此,理想的做法是使用专用于环境变量的集合 WshEnvironment。

    现在,按照 Luis 的建议,我编写了以下脚本来添加系统环境变量,

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

    将此代码保存在vbs文件中,执行vbs文件。现在,您将在 cmd 提示符下获得 2 个环境变量无需重新启动系统

    删除变量的类似脚本,

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

    这也不需要任何重新启动/登录注销。

    享受吧!

    我已经在 XP 上测试过了,希望这也适用于 Windows 7。

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 2016-02-23
      • 1970-01-01
      • 2023-03-31
      • 2020-06-23
      • 2011-01-17
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多