2012-03-01 141 views
1

我有一个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变量

回答

0

有至少一个其他问题,您的做法:将扩大目前在路径中的任何环境变量,这可能是不可取的。另外你可能会发现setx偶尔会挂起,我相信这是由于其他应用程序在广播更改时没有按预期做出响应。

最好的解决方案可能是建立一个MSI文件或使用另一个发展良好的安装程序技术。

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

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

this question见的超级用户。这里有一个答案,其中包括基于批处理文件的解决方案,尽管它不能可靠地工作。