附加到系统 PATH 变量,但不包含用户的 PATH 变量

附加到系统 PATH 变量,但不包含用户的 PATH 变量

想象一下以下环境变量:

系统路径 = C:\Windows
Bob 的用户路径 =C:\Users\Bob

在命令提示符中,PATH命令返回C:\Windows;C:\Users\Bob

跑步后setx /m PATH "C:\Node;%PATH%"
系统路径 =C:\Node;C:\Windows;C:\Users\Bob

在新的命令提示符下,PATH命令返回C:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob

另一个用户 Alice 登录。Alice
用户路径 =C:\Users\Alice

在命令提示符下,PATH命令返回C:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice

Bob 的变量中有一个重复的路径PATH,而 Alice 的变量中也有 Bob 的路径PATH

有没有办法将其附加到系统中PATH而不被当前用户污染PATH

答案1

在 Windows 7 中,你可以使用以下命令查找系统路径

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

如果该功能在 Windows 8 上仍然有效,则使用它来构建新值。

您必须弄清楚如何解析 的输出reg query。以下是可能有用的方法:

对于/f“tokens=1,2*”%a在(' reg query“HKLM\…\Environment”/v path ')中设置currentValue=%c

在哪里

  • 该字符串是用单引号括起来的命令(上面给出)。'reg query "HKLM\…\Environment" /v path'reg query
  • acurrentValuec是变量名。你可以选择任何你想要的变量名,但必须满足以下限制:ac必须是单个字母,相隔两个字母(例如,你可以使用nand p、或xand z)。
  •                             for /f "options" %variable in ('command1') do command2
    运行,解析输出,将值分配给(),(见上文;但也请参见下文)并执行。command1%variable%acommand2
  • tokens=1,2*意味着%a获取每一行(剩余)的第一个标记(单词), %b获取第二个单词,然后%c获取该行的其余部分。

    • 第一个单词是path(值名称)。
    • 第二个词是REG_EXPAND_SZ(值类型)。
    • 该行的其余部分是值。

    (您可以直接使用tokens=2*然后currentValue=%b。)

因此,执行上述操作后,你应该能够做到

setx PATH "C:\Node;%currentValue%" /m
  • .BAT如果在脚本(文件)中执行此操作,请使用%%a%%c
  • echo在使用之前,请务必先使用命令进行测试setx

答案2

不要将 Bob 的特定路径放在每个人都使用的系统路径值中。

读取系统路径的旧值,修改它,然后设置新值。如果cmd.exe(显然该set命令可以创建/修改/删除但不能读取)不提供这些功能,请将其放入批处理文件调用的程序中。

系统路径值是通过注册表找到(并更改)的。我只需搜索我知道它必须准确发现的值,然后使用 Google 搜索该关键路径以检查有关它的说法。
(后来:它们是HKLM\System\CurrentControlSet\Control\Session Manager\EnvironmentHKCU\Environment

任何更高级的 Windows 脚本语言或支持 Windows API 的脚本语言都可以处理该问题。或者,以您选择的语言编译的可执行程序。

CMD 替换 shell掌控全局有一个@REGQUERY 函数:

echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]

因为听起来你已经想到了一台特定的机器,你可以安装TCC/LE(免费)并使用它来解释您的批处理文件。

相关内容