呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

windows 中永久修改环境变量的三种方法

测试环境

windows 7 x64 位旗舰版

需求描述

有一个简单的需求:

写一个批处理,将当前目录追加到 path 环境变量最后,使其永久生效。

我找到如下了三个解决方案:

方法一:使用 setx.exe

@echo off
set cur_path=%cd%

echo 添加 path 环境变量……
.\setx.exe /m "path" "%path%;%cur_path%"

setx.exe 的使用可以参考另一篇博文:python环境变量自动配置脚本(setx使用)

方法二:修改注册表

@echo off
set cur_path=%cd%

echo 添加 path 环境变量……
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;%cur_path%" /f

方法三:使用 wmic

@echo off
set cur_path=%cd%

echo 添加 path 环境变量……
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;%cur_path%"

注意

在使用以上三种方法追加 path 环境变量的时候有一个坑,当前的 %path% 环境变量中 不能带有双引号 ",否则会与命令中的双引号 " 冲突,报出莫名其妙的错误。比如无效语法等等。

三种方法的优缺点

方法一可以立即生效,重新打开一个 cmd 即可查看修改后环境变量;方法二、三需要注销或者重启系统才能生效,使用命令重启 explorer.exe 也无法使其立即生效。

但是方法一有个缺点,我在测试机器上把 setx.exe 从 system32 目录复制到其它目录后,使用 当前目录的 setx.exe 失效,不明白是为什么。因为有些机器没有自带 setx.exe ,所以方法一不具有普适性。

后记

最后采用了方法二,比较简单粗暴,依赖少。很遗憾没有找到一个完美的解决方案,我想是因为机制设计的时候有缺陷,万恶的 windows 批处理。

原创声明

转载请注明:呓语 » windows 中永久修改环境变量的三种方法