Windows 里的环境变量大致可以分三层:
Process 当前进程级 User 用户级 Machine 系统级可以理解为作用范围从小到大:
Process < User < Machine1. Process:当前进程级环境变量
Process 环境变量只在当前程序进程里有效。
例如你在 PowerShell 里执行:
$env:JAVA_HOME ="C:\Program Files\Java\jdk-21"$env:Path ="$env:JAVA_HOME\bin;$env:Path"这只会影响当前这个 PowerShell 窗口。
特点:
只在当前 PowerShell 窗口有效 关闭窗口后消失 重启电脑后消失 不会写入系统设置 不会影响其他已经打开的 PowerShell、CMD、IDE适合临时测试,比如临时切换 JDK 版本。
查看当前进程里的变量:
echo$env:JAVA_HOMEecho$env:Path2. User:用户级环境变量
User 环境变量对当前 Windows 用户永久有效。
例如你的 Windows 用户叫ethan,那用户级环境变量只对ethan有效,其他 Windows 用户看不到。
设置用户级JAVA_HOME:
[Environment]::SetEnvironmentVariable("JAVA_HOME","C:\Program Files\Java\jdk-21","User")特点:
当前 Windows 用户有效 关闭 PowerShell 后不会消失 重启电脑后仍然存在 不影响其他 Windows 用户 通常不需要管理员权限设置后,一般需要重新打开 PowerShell、CMD、Trae IDE 或其他终端,才能读取到新的环境变量。
查看用户级变量:
[Environment]::GetEnvironmentVariable("JAVA_HOME","User")3. Machine:系统级环境变量
Machine 环境变量对整台电脑上的所有 Windows 用户有效。
设置系统级JAVA_HOME:
[Environment]::SetEnvironmentVariable("JAVA_HOME","C:\Program Files\Java\jdk-21","Machine")特点:
所有 Windows 用户都有效 关闭终端后不会消失 重启电脑后仍然存在 通常需要管理员权限 适合全局安装的软件配置查看系统级变量:
[Environment]::GetEnvironmentVariable("JAVA_HOME","Machine")三者对比
| 类型 | 作用范围 | 是否永久 | 是否需要管理员权限 | 常见用途 |
|---|---|---|---|---|
| Process | 当前 PowerShell/CMD/程序窗口 | 否 | 否 | 临时测试、临时切换版本 |
| User | 当前 Windows 用户 | 是 | 通常不需要 | 个人开发环境配置 |
| Machine | 整台电脑所有用户 | 是 | 通常需要 | 全局软件配置 |