[Windows/CMD] 不重启设置/刷新环境变量
目录
1 文由
当我已经通过如下路径设置了Maven的环境(maven-3.5.4)。
"我的电脑"->"属性"->"高级"->"环境变量"->"系统变量"
MAVEN_HOME: D:\Program Files(x86)\Maven\apache-maven-3.5.4 [新建 系统变量MAVEN_HOME]
Path: %MAVEN_HOME%\bin [新增 系统变量Path的配置项]
但是,过了一段时间后,由于实际情况需要更换版本为(maven-3.6.3)。此时,需要更换MAVEN版本,并更新MAVEN的环境变量。
我按照上述过程更新了MAVEN_HOME的值:
MAVEN_HOME: D:\Program Files(x86)\Maven\apache-maven-3.6.3
此时,查看Maven版本:(为什么依旧是3.5.4?!?!?!?这就是写本文的由头了!!!)
E:\Projects\SpringBootSample>mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: D:\Program Files(x86)\Maven\apache-maven-3.5.4\bin\..
Java version: 1.8.0_111, vendor: Oracle Corporation, runtime: D:\Program Files(x86)\Java\jdk1.8.0_111\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
查看环境变量Path (依旧是3.5.4!!!)
echo %Path%

即 环境变量没有及时刷新/更新成功,导致使用了之前设置的旧的环境变量值
2 刷新环境变量的解决方法
方法2: 重启电脑刷新(永久性更新)
方法1: 命令行刷新(临时性更新)
此法,不用担心DOS窗口中的修改会影响环境变量的值,DOS窗口中的环境变量只是Windows环境变量的一个副本而已。
但是对副本的修改却会引发Windows环境变量的刷新,这正是咱们想要的!
- step1 拷贝原系统环境变量(MAVEN_HOME/Path)的所有值
echo %MAVEN_HOME%
echo %Path%
(拷贝输出的所有内容)
- step2 查找/更换: 在Path的拷贝内容中找到并更换Maven的部分
- step3 命令行执行
set MAVEN_HOME=D:\Program Files(x86)\Maven\apache-maven-3.6.3
set Path=D:\Program Files(x86)\NetSaRang\Xftp 6\;D:\Program Files(x86)\NetSaRang\Xshell 6\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NGX;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;D:\Program Files(x86)\Java\jdk1.8.0_111\\bin;D:\Program Files(x86)\Java\jdk1.8.0_111\\jre\bin;D:\Program Files(x86)\Maven\apache-maven-3.6.3-self\bin;D:\Program Files(x86)\Python\3.8.5;D:\Program Files(x86)\Apache Tomcat\apache-tomcat-8.5.33\lib;D:\Program Files(x86)\Apache Tomcat\apache-tomcat-8.5.33\bin;D:\Program Files(x86)\Wechat;D:\Program Files(x86)\WXWechat\WXWork;D:\Program Files(x86)\Foxmail;D:\Program Files(x86)\QQ\Bin;D:\Program Files(x86)\HBuilderX\HBuilderX;D:\Program Files(x86)\Snipaste;D:\Program Files(x86)\Git\Git\cmd;D:\Program Files(x86)\TortoiseSVN\bin;C:\Users\Johnny\AppData\Local\Microsoft\WindowsApps;;D:\Program Files(x86)\Microsoft VS Code\Microsoft VS Code\bin


3 git-bash与Windows Shell
- Window端的Git-Bash在修改完环境变量,甚至重启电脑,依旧很难及时同步最新的环境变量。
1 这导致,git-bash中的maven版本很可能与Window Shell(CMD)的版本不一致的BUG现象。
2 临时解决Git-Bash的方法:
+ 重新打开 Git-Bash
+ Git-Bash中 set/export Path/MAVEN_HOME
4 扩展:基于CMD设置系统变量(setx)
在Windows的cmd中设置系统环境变量可以使用setx
命令。这个命令会永久地修改【系统环境变量】,即使在命令提示符关闭后也会保留。
- 设置一个新的系统环境变量:
setx MY_VARIABLE "myValue"
- 设置一个新的系统环境变量,且让它对所有用户生效(默认只对当前用户生效):
setx MY_VARIABLE "myValue" /M
- 设置一个新的系统环境变量,并指定其路径:
setx PATH "%PATH%;C:\MyNewPath"
- 新开CMD窗口,验证
注意:使用
setx
命令时,如果你想要在变量值中包含引号,需要使用双引号将整个setx
命令及其参数括起来,并且在变量值内部使用单引号。
另外,setx
命令通常【不会立即生效】,直到【重新启动命令提示符窗口】或者【重新启动计算机】。如果你需要立即访问这些变量,可以启动一个新的命令提示符窗口或者重启计算机。
echo %MY_VARIABLE%
5 总结: 基于CMD操作系统变量
注:系统环境变量,本质上也是系统变量。
查看
- 查看全部环境变量
set
- 查看
xx
开头的环境变量
其他开头的类似
rem 键值中存在空格等特殊符号的使用双引号包裹,下同
set xx
重要技巧:CMD
命令方式,打开当前用户的配置系统变量界面
可通过此方式绕过没有管理员权限,无法通过界面操作打开配置系统变量界面的场景
rundll32.exe sysdm.cpl,EditEnvironmentVariables
设置
临时系统变量
set "KEY"="value"
- 补充:追加
更新、追加多个值使用分号
;
隔开
清空时,值为""
引用变量值,可以使用%%
set "KEY"="%KEY%;value"
永系统境变量
- a、仅当前用户
setx "KEY" "value"
- b、所有的用户
setx "KEY" "value" /m
- 【特别忠告】谨防
"警告: 正保存的数据被裁断到 1024 字符。"
错误导致数据被截断,无法恢复的问题
- 问题描述:当通过
set / setx
方式配置系统变量时,若变量值太长,超过1024个字符时,会被截断,并报错:"警告: 正保存的数据被裁断到 1024 字符。
"。例如:
C:\Users\xxxxxx> setx "PATH" "%PATH%;%GOROOT%\bin"
警告: 正保存的数据被裁断到 1024 字符。
成功: 指定的值已得到保存。
C:\Users\xxxxxx> echo %Path%
C:\Program Files\XXXXXX\utils;c:\Users\xxxxxx\AppData\Local\Programs\Cursor\resources\app\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\XXXX 云盘;C;\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\Program\xxxxxxxx\xxxxxxxx-1.8.4-1;D:\Program\nacos\nacos-server-2.0.3\nacos\bin;D:\Program\ActiveMQ\apache-artemis-2.19.1\bin;D:\Program\Neo4j\neo4j-community-3.5.35\bin;D:\Program\GNUWin\GnuWin32\bin;D:\Program\Arthas\lib\3.5.2\arthas;D:\Program\Apache-Tomcat\apache-tomcat-8.5.84\bin;C:\Program Files (x86)\Enterprise Vault\EVClient\x64\;D:\Program\WinMerge;C:\Program Files\dotnet\;C:\Users\xxxxxx\AppData\Local\Microsoft\WindowsApps;D:\Program\Java\jdk1.8.0_261\bin;D:\Program\Java\jdk1.8.0_261\jre\bin;D:\Program\git\cmd;D:\Program\IDEA\IDEA 2021.3.1\IntelliJ IDEA 2021.3.1\bin;D:\Program\maven\apache-maven-3.8.1\bin;D:\Program\gradle\gradle-6.8\bin;D:\Program\VSCode\bin;D:\Program\DiffUse;D:\Program\PyCharm\PyCharm2023.2.1\bin;c:\Users\;D:\Program\JMeter\apache-jmeter-5.5\bin;D:\Program\miktex\miktex-24.1\miktex\bin\x64\;D:\Program\nodejs\node-v20.11.1-win-x64;C:\insolu\client001;C:\Users\xxxxxx\AppData\Local\Microsoft\WindowsApps;D:\Program\Java\jdk1.8.0_261\bin;D:\Program\Java\jdk1.8.0_261\jre\bin;D:\Program\git\cmd;D:\Program\IDEA\IDEA 2021.3.1\IntelliJ IDEA 2021.3.1\bin;;D:\Program\maven\apache-maven-3.8.1\bin;D:\Program\gradle\gradle-6.8\bin;D:\Program\VSCode\bin;D:\Program\DiffUse;D:\Program\PyCharm\PyCharm2023.2.1\bin;;D:\Program\netcat;C:\Users\xxxxxx\AppData\Local\Microsoft\WinGet\Packages\jqlang.jq_Microsoft.Winget.Source_8wekyb3d8xxxx;;C:\Users\xxxxxx\AppData\Local\Programs\Ollama
再打开cmd,查询
Path
时,已被截断得面目全非
- 建议措施:
- 变量值太长时,尽量通过(配置系统变量的)用户界面进行配置。
- 确需通过命令行
set/setx
方式配置时,建议:执行配置命令前,先查询(echo %targetKey%
)并备份原来配置的值
删除
临时系统变量
- 置空即可
永久系统变量
- 删除永久系统变量,需通过删除注册表信息实现。
下面以 win10 为例,其他 Windows 版本需找到对应的存储环境变量的注册表位置。
- 当前用户
REG DELETE "HKEY_CURRENT_USER\Environment" /F /V "KEY"
- 所有用户(整个系统)
REG DELETE "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V "KEY"
X 参考文献

本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen/p/13527718.html
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen/p/13527718.html
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)