如何通过命令行将条目永久地附加到系统的 PATH 变量中?

如何通过命令行将条目永久地附加到系统的 PATH 变量中?

我需要做什么:

  • 将文件夹附加到%PATH%系统级别的环境变量。
  • 使改变永久生效。

我需要怎么做:

  • 使用命令提示符或其他方法所有必要的命令可以写入.BAT文件。
  • 使用仅有的这些工具可在无需 Internet 连接的 Windows XP SP3 裸机安装上使用。
  • 我宁愿在本地运行脚本,但我也可以远程访问目标系统。但请记住,我不能假设系统上启用了任何非默认服务(即远程注册表)。

脚本需要运行的系统:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

我非常熟悉这个SET命令,但我也知道它通常覆写现有变量,而不是将其附加到该变量。这是不可接受的。是否有其他工具(或SET我不知道的选项)可以将其附加到变量?或者,我是否需要在脚本中加入一个解决方法,包括将现有变量临时复制到另一个变量或文本文件?

此外,据我了解SET永久修改变量。我曾看到提到SETX,但这似乎不是内置在 Windows XP SP3 中的(或者,至少,在我使用的系统上似乎不可用)。还有其他方法可以使更改永久生效吗?是通过注册表编辑还是其他方式?

我四处寻找,从这里学到了很多关于在 Windows 中设置环境变量的知识。然而,我还没有找到完全重复能满足我需求的问题。如果有的话,请告诉我。

答案1

以下将“C:\bin”添加到您的路径,然后将新路径保存到注册表中:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%path%" /f

%path%请注意,假设路径不包含空格,则引号是可选的。

我只在 XP SP3 上测试过它,但它也应该可以在较新的版本上运行。

我猜测在机器重启之前登录的新用户可能无法获得新路径。

Harry 关于 %SystemRoot% 的评论是正确的,如果您想保留这些,您需要先从注册表中提取路径的旧值:

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%newPath%" /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)

答案2

临时路径:

设置路径=%path%C:\bin\

常量路径:

setx 路径 "%PATH%;C:\bin\"

享受!

答案3

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f

相关内容