根据网上的教程改良了下切换环境变量的脚本,命令行下可食~
    与网上版本相比:

    • 命令行下可自动提示管理员权限运行
    • 自动添加%JAVA_HOME%bin

    image.png
    使用方法:

    1. 修改set JAVA_HOME部分的jdk安装路径
    2. 运行压缩包中的setjavaenv.bat

    setjavaenv.zip

    1. @echo off
    2. rem ---获取管理员权限,会弹UAC---
    3. if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
    4. bcdedit >nul
    5. if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
    6. :UACPrompt
    7. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
    8. exit /B
    9. :UACAdmin
    10. cd /d "%~dp0"
    11. echo 已获取管理员权限
    12. echo 当前运行路径是:%CD%
    13. echo 当前使用的JDK版本:
    14. java -version
    15. rem ---配置JDK的安装目录---
    16. :init
    17. set JAVA_HOME_8=C:/Program Files/Java/jdk1.8.0_111/
    18. set JAVA_HOME_9=C:/Program Files/Java/jdk-9.0.4/
    19. set JAVA_HOME_11=C:/Program Files/Java/jdk-11.0.5/
    20. set JAVA_HOME_14=C:/Program Files/Java/jdk-14/
    21. set RefreshEnv=%~dp0/RefreshEnv.exe
    22. rem ---配置JDK的安装目录结束---
    23. echo =============================================
    24. echo 可切换jdk版本列表
    25. echo 8
    26. echo 9
    27. echo 11
    28. echo 14
    29. echo =============================================
    30. :select
    31. set /p opt=请选择jdk版本:
    32. if %opt%==8 (
    33. set TARGET_JAVA_HOME=%JAVA_HOME_8%
    34. )
    35. if %opt%==9 (
    36. set TARGET_JAVA_HOME=%JAVA_HOME_9%
    37. )
    38. if %opt%==11 (
    39. set TARGET_JAVA_HOME=%JAVA_HOME_11%
    40. )
    41. if %opt%==14 (
    42. set TARGET_JAVA_HOME=%JAVA_HOME_14%
    43. )
    44. rem 删除现有的JAVA_HOMEclasspath环境变量
    45. set home=%JAVA_HOME%
    46. if defined home (
    47. echo 删除现有的JAVA_HOME环境变量
    48. wmic ENVIRONMENT where "name='JAVA_HOME'" delete
    49. )
    50. set class=%classpath%
    51. if defined class (
    52. echo 删除现有的classpath环境变量
    53. wmic ENVIRONMENT where "name='classpath'" delete
    54. )
    55. call %~dp0/RefreshEnv.exe
    56. echo 当前选择的Java路径:%TARGET_JAVA_HOME%
    57. wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="%TARGET_JAVA_HOME%"
    58. wmic ENVIRONMENT create name="classpath",username="<system>",VariableValue=".;%%JAVA_HOME%%\lib\dt.jar;%%JAVA_HOME%%\lib\tools.jar"
    59. rem 如果path不存在JAVA_HOME/bin则添加
    60. wmic ENVIRONMENT where "name='path' and UserName='<system>'" get UserName,VariableValue | findstr /i "JAVA_HOME" >nul && (
    61. echo .
    62. ) || (
    63. echo 添加path:%%JAVA_HOME%%bin
    64. wmic ENVIRONMENT where "name='Path' and UserName='<system>'" set VariableValue="%path%;%%JAVA_HOME%%bin"
    65. )
    66. rem 刷新 env
    67. call %RefreshEnv%
    68. echo 按任意键退出!
    69. pause>nul
    70. @echo on

    注意:

    1. setjavaenv.bat和RefreshEnv.exe放在同一目录。
    2. 想全局的话,建议将两个文件直接放到某个环境变量目录,命令行直接运行。
    3. 如果发现无法切换,可能是java安装后在C:\ProgramData\Oracle\Java目录生成了java.exe,请删除相关文件。
    4. 切换后当前cmd进程无法完成java版本切换,需重开cmd。
    5. RefreshEnv.exe的作用是在不重启情况下让环境变量生效。可用RefreshEnv.cmd代替。

    参考:
    https://www.cnblogs.com/Zender/p/7479717.html
    http://www.cppcns.com/jiaoben/dosbat/336231.html
    https://github.com/chocolatey-archive/chocolatey/blob/master/src/redirects/RefreshEnv.cmd