我需要做什么:
- 将文件夹附加到
%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