Windows批处理,只选择用户变量

时间:2012-11-13 10:28:54

标签: windows batch-file

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

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

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

提前致谢。

编辑:在文档中找到以下声明:

%PATH%变量被设置为系统变量和用户变量,组合2个值以为当前登录用户提供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

我希望这次我更清楚。

2 个答案:

答案 0 :(得分:8)

您如何修改变量?

只有一个环境变量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中。在批处理文件中使用它时,请记得加倍%

答案 1 :(得分:1)

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

我试过这个,它似乎适用于用户环境变量

setx /s computername PATH %PATH%;newpathvalue

当我测试这个时,我实际上用PATH替换了一个新的var以确保它有效,但在执行此操作之前,最好复制现有的变量,以防万一。

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

希望这有帮助