Windows批处理,只select用户variables

在环境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

我希望这次我更清楚。

Solutions Collecting From Web of "Windows批处理,只select用户variables"

你怎么修改变量?

只有一个环境变量PATH ,所以你可以继续改变它。 这些变化是暂时的(并且对你的进程和它的子进程是本地的)。

在注册表中有两个(实际上更多)的永久位置,当创建一个进程时,环境变量被初始化。 您可以使用reg实用程序修改它们。 因为它们是分开的,所以没有歧义:

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

您可能需要重新登录更改注册表才能生效(我不记得是否有程序化的方式来通知资源管理器,这些设置已经改变)。 还要注意,默认情况下,子进程会继承父进程的环境(除非父进程采取其他措施),例如,如果启动一个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的末尾,用分号将其与其他用户分隔;

希望这可以帮助