如何使用BATCH或VBS创建永久系统变量?

时间:2012-01-02 21:09:06

标签: windows windows-7 vbscript batch-file

我正在制作一个100%的安装程序,具体取决于系统变量,例如%TEMP%或%Path%,用户首先双击windows.bat文件。

但是,如何使用VBS或BATCH在Windows XP,Vista,7,8中设置永久系统变量?

我尝试使用BATCH,但在Windows XP中,大多数用户默认没有setx,所以我想避免使用该技术。有没有更好的方法呢?

C:\Documents and Settings\sun>REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Ses
sion Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncl
udeHereQuestionMark"

The operation completed successfully

C:\Documents and Settings\sun>REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Ses
sion Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncl
udeHereQuestionMark"
Value MyApplicationWillUsetThis exists, overwrite(Y/N)? Y

The operation completed successfully

2 个答案:

答案 0 :(得分:4)

您可以在注册表中的HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment下创建REG_SZ值。值的名称指定环境变量的名称,该值指定环境变量的值。

您还可以修改现有值。

为了修改注册表,您可以使用WScript.Shell对象的RegRead和RegWrite方法。有关示例,请查看Manipulating the System Registry

修改:您可以先删除现有值,然后重新创建。

REG DELETE "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyApplicationWillUsetThis /f
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncludeHereQuestionMark"

答案 1 :(得分:3)

如何从VBScript

设置环境变量
Set WshShell = CreateObject("Wscript.Shell")

' set a permanent environment variable %MyVarName% for all users
WshShell.Environment.item("MyVarName") = "MyVarValue"

如果上述设置不是永久性的,请尝试此设置。这将为所有用户设置永久环境变量。您可以使用Environment集合尝试系统,用户,易失性和流程类别。

With WSHShell.Environment("SYSTEM")
    .item("MyVarName") = "MyVarValue"
End With

您还可以使用ExpandEnvironmentStrings读取环境变量,或用长命令行类型字符串中的值替换它们。

sValue = WshShell.ExpandEnvironmentStrings("%MyVarName%")

要使用注册表,请尝试

sRegKey = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\MyVarName"

sValue = WshShell.RegRead(sRegKey)

' don't write if no change is required.
If sValue <> sNewValue Then WshShell.RegWrite sRegKey , sNewValue