Windows下切换Java版本的PowerShell脚本

分享一个 PowerShell 脚本,用于在 Windows 系统安装了多个 Java 版本时,快速切换环境变量中的 Java 版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 以管理员权限运行
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Start-Process PowerShell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
exit
}

Write-Host "=== Java 版本切换工具 ===" -ForegroundColor Green
Write-Host "1. Java 8"
Write-Host "2. Java 17 (Flutter 推荐)"
Write-Host "3. Java 21"
Write-Host ""

$choice = Read-Host "请选择 Java 版本 (1-3)"

$javaPaths = @{
'1' = 'C:\Program Files\Java\jdk1.8.0_202'
'2' = 'C:\Program Files\Java\jdk-17'
'3' = 'C:\Program Files\Java\jdk-21'
}

if ($javaPaths.ContainsKey($choice)) {
$javaHome = $javaPaths[$choice]

# 设置系统环境变量
[System.Environment]::SetEnvironmentVariable('JAVA_HOME', $javaHome, [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('JAVA_HOME', $javaHome, [System.EnvironmentVariableTarget]::User)

# 更新当前会话的 PATH
$oldPath = [System.Environment]::GetEnvironmentVariable('PATH', [System.EnvironmentVariableTarget]::Machine)
$newPath = $javaHome + '\bin;' + $oldPath
[System.Environment]::SetEnvironmentVariable('PATH', $newPath, [System.EnvironmentVariableTarget]::Machine)

Write-Host "已切换到 Java $choice" -ForegroundColor Green
Write-Host "JAVA_HOME: $javaHome" -ForegroundColor Yellow

# 验证
& "$javaHome\bin\java.exe" -version

Write-Host "请重启所有命令窗口和IDE使更改生效!" -ForegroundColor Red
} else {
Write-Host "无效选择!" -ForegroundColor Red
}

Read-Host "按回车键退出"

如何保存脚本

  • 新建目录用于存放脚本,例如 C:\Tools
  • 使用任意文本编辑器将上面的内容保存为 java-switch.ps1(注意扩展名为 .ps1,保存为 UTF-8)
  • 如需自定义版本路径,编辑文中的 $javaPaths 映射:source/_posts/Windows下切换Java版本的PowerShell脚本.md:31-35

示例:如果你的 JDK 安装在 D:\Java\jdk-17.0.12,可将 '2' 的路径改为 D:\Java\jdk-17.0.12

使用方法

  • 以管理员权限运行 PowerShell(脚本会自动请求管理员权限)

  • 运行脚本:

    1
    powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Tools\java-switch.ps1"
  • 根据提示输入 123 进行切换;例如 Flutter 推荐选择 2(Java 17)

  • 切换完成后脚本会显示当前 JAVA_HOME 并执行 java -version 进行验证

  • 重启所有命令行窗口和 IDE 使更改生效

注意事项

  • 请确保 $javaPaths 中的路径真实存在,否则验证会失败

  • 脚本会设置系统级与用户级 JAVA_HOME,并将对应 bin 目录置于系统 PATH 开头

  • 如果此前 PATH 中已有多个 Java 的 bin,可能重复;必要时到系统“环境变量”中清理旧项

  • 如遇到执行策略限制,使用 -ExecutionPolicy Bypass(如上命令)或执行:

    1
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Windows下切换Java版本的PowerShell脚本
https://www.305871230.xyz/posts/2328067626/
作者
游理
发布于
2025年11月1日
许可协议