6

在环境变量中,我有一个用于用户变量和系统变量的 PATH 变量。

在批处理脚本中,为了让我使用新的给定路径附加用户 PATH 变量,我需要选择当前值。不幸的是 %PATH% 返回用户变量和系统变量的组合。

当然我只想给用户变量添加一个新的自定义路径值。使用系统路径来增强它也没有意义。这就是为什么我有2个变量。

提前致谢。

编辑:在文档中找到以下语句:

%PATH% 变量同时设置为系统变量和用户变量,这两个值组合起来为当前登录的用户提供 PATH....

例子:

用户变量:

PATH
value: c:\dev

系统变量

PATH
value: c:\Program Files

我想要做的是将值添加到用户变量中:c:\tmp,以便最终 PATH 将具有值:c:\dev;c:\tmp

但是,如果打开一个 cmd 窗口:

echo %PATH%
c:\Program Files;c:\dev

所以 setx 将执行以下操作

setx path "%path%;c:\tmp"

打开新的cmd

echo %PATH%
c:\Program Files;c:\dev;c:\tmp

这是错误的,因为我只需要 c:\dev;c:\tmp

我希望这次我更清楚了。

4

2 回答 2

9

你是如何修改变量的?

只有一个环境变量PATH,因此您可以继续更改它。这些更改是暂时的(并且对于您的进程及其子进程而言是本地的)。

Registry 中有两个(实际上更多)持久性位置,在创建进程时会从这些位置初始化环境变量。reg您可以使用实用程序修改它们。没有歧义,因为它们是分开的:

  • HKEY_CURRENT_USER\环境
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

您可能必须重新登录才能使注册表中的更改生效(我不记得是否有编程方式通知资源管理器这些设置已更改)。另请注意,默认情况下,子进程继承其父进程的环境(除非父进程采取特殊措施否则),因此,例如,如果您启动一个cmd窗口并稍后通过系统设置对话框修改环境,则从该窗口启动的应用程序cmd将看不到变化。

[UPD]reg您可以使用实用程序从注册表中获取用户特定环境变量的值:

reg query HKCU\Environment /v PATH

尽管您必须过滤其输出以获取实际值,因为它会吐出一些无用的文本。这是一个示例咒语:

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set value=%B

它将结果存储在环境变量value中。%记住在批处理文件中使用它时要加倍。

于 2012-11-13T11:18:09.913 回答
2

如果我理解你的问题,你有 2 个%PATH%变量。一个系统,一个用户,(大概是您自己创建了后者)。

我已经尝试过了,它似乎适用于用户环境变量

setx /s computername PATH %PATH%;newpathvalue

当我对此进行测试时,我实际上替换PATH了一个新的 var 以确保它可以正常工作,但最好在这样做之前制作一个现有 var 的副本,以防万一。

它将PATH使用您指定的新值标记到现有用户环境变量的末尾,并用分号将其与其他变量隔开;

希望这可以帮助

于 2012-11-13T11:03:41.727 回答