批处理脚本机器环境变量

时间:2012-03-01 00:23:34

标签: windows environment-variables batch-file

我有一个Windows批处理脚本获取PATH环境变量,检查它是否有一些值,然后将其设置回来。例如:

SET CURRPATH=%PATH%
:: do some stuff to check for a value in CURRPATH and add the value in if it is not in there
setx PATH %PATH%

这样可行,但问题是我之前安装的其他内容创建了一个名为PATH的用户系统环境变量。当我在批处理脚本中访问%PATH%变量时,它将用户环境变量PATH和机器环境变量PATH连接起来。每次运行脚本时,用户变量PATH都会附加到机器环境变量中。有没有办法只访问机器环境变量?

虽然我可以简单地删除用户环境变量PATH,但这不是一个好的通用解决方案,因为我无法保证运行脚本的人是否会遇到同样的问题。

请注意,这似乎特定于PATH变量

1 个答案:

答案 0 :(得分:0)

您的方法至少还有一个问题:它会扩展PATH中存在的任何环境变量,这可能是不合需要的。另外你可能会发现setx偶尔会挂起,我相信这是因为其他应用程序在广播更改时没有按预期响应。

最好的解决方案可能是构建MSI文件或使用其他完善的安装程序技术。

第二个最好的方法是编写一个应用程序(一个真正的应用程序,而不是一个批处理脚本)来操作保存环境变量的注册表设置。包含机器环境变量的注册表项可以在这里找到:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

另请参阅SuperUser上的this question。有一个答案,其中包括一个基于批处理文件的解决方案,虽然它不能可靠地工作。