在 bat 下修改环境变量有几种方式, 比如 set setx vmic ENVIRONMENT

set

windows 的 set 和 bash 里面直接赋值类似, 只在当前脚本中生效, 比如

1
2
3
4
set a=b

echo %a%
b

setx

setx 和 set 类似, 不一样的是 setx 会把设置持久化保存起来

1
setx a c

因为 setx 直接将环境变量保存在注册表中, 所以 cmd 终端需要关闭重新打开才能生效

1
2
echo %a%
c

后续就算重启电脑, 也会生效, 不过数据量比较大的时候会报错: WARNING: The data being saved is truncated to 1024 characters, 最终修改的内容也是不完整的。所以不建议使用

vmic

wmic 常用命令

1
2
3
4
5
6
7
8
9
10
11
# 创建系统变量
wmic ENVIRONMENT create name="PPTV_HOME",username="<system>",VariableValue="%home%"

# 创建用户变量(替换一下计算机名和用户名)
wmic ENVIRONMENT create name="PPTV_HOME",username="计算机名\\用户名",VariableValue="%home%"

# 查看环境变量
wmic environment where "name='Path'" get UserName,VariableValue

# 删除环境变量
wmic ENVIRONMENT where "name='PPTV_HOME'" delete

举个例子

1
2
3
4
5
6
7
8
9
10
REM 设置一下需要添加环境变量的目录
SET DestFile="%USERPROFILE%\bin"

REM 增加bin环境变量
set path | findstr "%DestFile%" >nul && (
echo 环境变量已存在
) || (
echo 环境变量不存在
wmic ENVIRONMENT where "name='Path' and username='%USERDOMAIN%\\%USERNAME%'" set VariableValue="%Path%;%DestFile%"
)

注册表方式

当前用户环境变量

1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"a"="b"

系统环境变量

1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"c"="d"