在环境变量中,我有一个用户变量和系统变量的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
我希望这次我更清楚。
答案 0 :(得分:8)
您如何修改变量?
只有一个环境变量PATH
,因此您可以继续进行更改。这些变化是暂时的(并且是您的流程及其子项的本地变化)。
在Registry中有两个(实际上更多)持久性位置,在创建进程时从中初始化环境变量。您可以使用reg
实用程序对其进行修改。没有歧义,因为它们是分开的:
您可能必须重新登录才能使注册表中的更改生效(我不记得是否有一种通过编程方式通知资源管理器这些设置已更改)。另请注意,默认情况下,子进程会继承其父进程的环境(除非父进程采取特殊措施),例如,如果您启动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
的末尾,并使用分号;
将其与其他值分开。
希望这有帮助