在 Windows 上永久设置环境变量
把用户或系统级环境变量永久写入——讲清三种作用域($env:、User、Machine)以及 setx 会截断的老坑。
运行 `[Environment]::SetEnvironmentVariable('JAVA_HOME', '<路径>', 'User')` 持久保存变量;传 'Machine' 则对全系统生效。
01命令
命令
$ [Environment]::SetEnvironmentVariable('JAVA_HOME', 'C:\Program Files\Java\jdk-21', 'User')02作用说明
`$env:JAVA_HOME = '...'` 只在当前 PowerShell 会话有效;SetEnvironmentVariable 指定 Target 后会写入注册表,之后所有新进程都会继承。有个刻意的特性:当前会话仍然看不到新值——如果脚本马上要用,请同时设置 `$env:JAVA_HOME`。CMD 里等价命令是 `setx JAVA_HOME "..."`,同样持久化,但会把超过 1024 字符的值静默截断——用这种方式改 PATH 是著名的翻车现场。
03风险
!注意: 不要用 setx 或手工 SetEnvironmentVariable 整体覆盖 PATH——进程的 PATH 是用户与机器两部分的合并,直接覆盖曾毁掉无数人的 PATH。
04撤销
撤销
$ [Environment]::SetEnvironmentVariable('JAVA_HOME', $null, 'User')05来源
- Environment.SetEnvironmentVariable Method | Microsoft Learn依据: Microsoft documents SetEnvironmentVariable(name, value, EnvironmentVariableTarget) where Machine/User persist to the registry and passing null deletes the variable.
- SETX - Windows CMD依据: SS64 documents setx persisting environment variables to the registry for future sessions, without affecting the current one.
最后验证: 2026-09-17 · 分类: 开发者