批处理脚本机器环境变量

Posted

技术标签:

【中文标题】批处理脚本机器环境变量【英文标题】:batch script machine environment variables 【发布时间】:2012-03-19 12:23:48 【问题描述】:

我有一个 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 的 user 系统环境变量。当我在批处理脚本中访问 %PATH% 变量时,它会连接用户环境变量 PATH 和机器环境变量 PATH。每次我运行脚本时,用户变量 PATH 都会附加到机器环境变量中。有没有办法只访问机器环境变量?

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

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

【问题讨论】:

【参考方案1】:

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

最好的解决方案可能是构建一个 MSI 文件或使用另一种成熟的安装程序技术。

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

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

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

【讨论】:

以上是关于批处理脚本机器环境变量的主要内容,如果未能解决你的问题,请参考以下文章

批处理脚本-延迟环境变量扩展

使用python调用设置环境变量的批处理脚本并运行另一个使用它们的程序

如何在批处理脚本中刷新 PATH 环境变量

如何在vbs中设置可以在调用批处理脚本中读取的环境变量

通过从perl脚本调用的批处理文件设置环境变量

批量复制及执行命令shell脚本