Windows 批处理脚本计算机环境变量

Windows 批处理脚本计算机环境变量,windows,environment-variables,batch-file,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的user系统环境变量。当我在批处理脚本中访问%PATH%变量时,它将连

我有一个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中存在的任何环境变量,这可能是不需要的。另外,您可能会发现setx偶尔会挂起,我相信这是由于其他应用程序在广播更改时没有按预期响应

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

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
另请参见“超级用户”。这里有一个答案,其中包括一个基于批处理文件的解决方案,尽管它不能可靠地工作