的VBScript:Windows系统环境变量,变化没有得到体现在CMD提示

的VBScript:Windows系统环境变量,变化没有得到体现在CMD提示

问题描述:

我写了一个VB脚本(.VBS)添加Windows系统环境变量,如下图所示,的VBScript:Windows系统环境变量,变化没有得到体现在CMD提示

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

当我看到这个环境变量系统属性 - >高级 - >环境变量对话框,它显示那里的环境变量。

但是,当我运行命令提示符并在那里键入“设置”命令时,我没有在那里找到该变量。 (在VBS执行后我开始了新的CMD提示)

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

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

任何想法?

+0

我没有测试,但我确定在上面的代码中注销/登录就足够了。 – 2011-05-05 16:53:52

+0

即使不需要登录/注销,在执行VB脚本之后,您只需打开“系统属性 - >高级 - >环境变量对话框”,然后按OK按钮即可。下次打开cmd promt,你会看到在VBS中设置的env变量。但是,我不希望用户玩这样的技巧... – 2011-05-06 06:18:50

那是因为你是在注册表中的“插入”永久价值,树立了“活”的值,用流动的代码,对于prouposes使用两个代码

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

感谢路易斯!

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

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

现在,路易斯的建议,我写了下面的脚本添加系统环境变量,

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。