在环境variables中,我对用户variables和系统variables都有一个PATHvariables。
在批处理脚本中,为了使用新的给定path附加用户PATHvariables,我需要select当前值。 不幸的是,%PATH%返回用户variables和系统variables的组合。
当然,我只想为用户variables添加一个新的自定义path值。 用系统path来增强它也没有意义。 这就是为什么我有两个variables。
提前致谢。
编辑:在文档中find以下语句:
%PATH%variables被设置为一个系统和用户variables,这两个值被合并为当前login用户的path….
例:
用户variables:
PATH value: c:\dev
系统variables
PATH value: c:\Program Files
我想要做的是添加到用户variables的值: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
我希望这次我更清楚。
你怎么修改变量?
只有一个环境变量PATH
,所以你可以继续改变它。 这些变化是暂时的(并且对你的进程和它的子进程是本地的)。
在注册表中有两个(实际上更多)的永久位置,当创建一个进程时,环境变量被初始化。 您可以使用reg
实用程序修改它们。 因为它们是分开的,所以没有歧义:
您可能需要重新登录更改注册表才能生效(我不记得是否有程序化的方式来通知资源管理器,这些设置已经改变)。 还要注意,默认情况下,子进程会继承父进程的环境(除非父进程采取其他措施),例如,如果启动一个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
。 请记住在批处理文件中使用它时要加倍。
如果我理解你的问题,你有2 %PATH%
变量。 一个系统和一个用户(大概你自己创建了后者)。
我已经试过这个,它似乎工作的用户环境变量
setx /s computername PATH %PATH%;newpathvalue
当我测试这个时候,我实际上用一个新的变量替代了PATH
,以确保它能正常工作,但是在做这件事之前最好先制作一个现有变量的副本,以防万一。
它将使用您指定的新值将其标记到现有用户环境变量PATH
的末尾,用分号将其与其他用户分隔;
。
希望这可以帮助