如何写⼀个切换JDK版本的bat脚本
在这个脚本中,有⼀个关键的命令,那就是SETX
在cmd窗⼝下输⼊SETX /?命令,可以看到以下的帮助信息
SetX 有三种使⽤⽅式:
语法 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
语法 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
语法 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
描述:
在⽤户或系统环境创建或修改环境变量。能基于参数、注册表项或⽂件输
⼊设置变量。
参数列表:
/S    system          指定要连接到的远程系统。
/U    [domain\]user  指定应该在哪个⽤户上下⽂执⾏命令。
/P    [password]      指定给定⽤户上下⽂的密码。如果省略则
提⽰输⼊。
var                    指定要设置的环境变量。
value                  指定分配给环境变量的值。
/K    regpath        指定变量是基于注册表项的信息⽽设置的。
路径的格式应该是 hive\key\...\value。例如
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\TimeZoneInformation\StandardName。
/F    file            指定要使⽤的⽂本⽂件的⽂件名。
/A    x,y            指定绝对⽂件坐标(线 X,项⽬ Y)作为在此⽂件
⾥搜索的参数。
/R    x,y string      指定有关“字符串”作为搜索参数的相对⽂件坐标。
/M                    指定应该在系统 (HKEY_LOCAL_MACHINE) 环境中设
置此变量。在 HKEY_CURRENT_USER 环境下,默认
将设置此变量。
/X                    ⽤ x,y 坐标显⽰⽂件内容。
/
D    delimiters      指定其他限定符,如 "," 或 "\"。
内置分隔符是空格、制表符、回车和换⾏符。所有
ASCII 字符都可作为限定符。限定符的最⼤数量,
包括内置分隔符,是 15。
/?                    显⽰此帮助消息。
注意: 1) SETX 在注册表中将变量写⼊主机环境。
2) 在本地系统,⽤此⼯具创建或修改的变量将在以后的命令窗⼝可⽤,但
在当前的 命令窗⼝。
3) 在远程系统,⽤此⼯具创建或修改的变量在下次登录会话可⽤。
4) 有效的注册表项数据类型是 REG_DWORD,REG_EXPAND_SZ,REG_SZ
和 REG_MULTI_SZ。
5) 受⽀持的配置单元:  HKEY_LOCAL_MACHINE (HKLM),
HKEY_CURRENT_USER (HKCU)。
6) 限定符区分⼤⼩写。
7) REG_DWORD 的值是从注册表⾥以⼗进制格式提取出来的。
⽰例:
SETX MACHINE COMPAQ
SETX MACHINE "COMPAQ COMPUTER" /M
SETX MYPATH "%PATH%"
SETX MYPATH ~PATH~
SETX /S system /U user /P password  MACHINE COMPAQ
SETX /S system /U user /P password MYPATH ^%PATH^%
SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\TimeZoneInformation\StandardName
SETX BUILD /K "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
NT\CurrentVersion\CurrentBuildNumber" /M
SETX /S system /U user /P password TZONE /K HKEY_LOCAL_MACHINE\
System\CurrentControlSet\Control\TimeZoneInformation\
StandardName
SETX /S system /U user /P password  BUILD /K
"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
CurrentVersion\CurrentBuildNumber" /M
SETX /F ipconfig.out /X
SETX IPADDR /F ipconfig.out /A 5,11
SETX OCTET1 /F ipconfig.out /A 5,3 /D "#$*."
java系统变量设置SETX IPGATEWAY /F ipconfig.out /R 0,7 Gateway
SETX /S system /U user /P password  /F c:\ipconfig.out /X
虽然是很长的⼀段,不过关键信息就是可以⽤SETX来设置系统变量。通过以下的这条命令,我们可以对JAVA_HOME进⾏设置(当然前提是系统中有这个变量)
@SETX JAVA_HOME "V:\Program Files\Java\jdk1.8.0_77" /M
熟悉java配置的就会知道,通过配置JAVA_HOME我们才能使⽤JDK来进⾏开发,也就是说,只要能通过命令来修改JAVA_HOME,那就可以⾃由的切换我们想要的版本了。然后再在脚本中进⾏⼀些简单的判断就可以实现基本功能了。
以下是⼀个基本的脚本,实现在1.6和1.8之间的切换
@ECHO ========请以管理员权限运⾏========
@title JAVA_HOME SWITCH
@color 07
@ECHO 请选择
@ECHO  1.JDK1.8
@ECHO  2.JDK1.6
@CHOICE /C 12
@IF ERRORLEVEL 2 goto switchTo1.6
@IF ERRORLEVEL 1 goto switchTo1.8
@:switchTo1.8
@SETX JAVA_HOME "V:\Program Files\Java\jdk1.8.0_77" /M
@IF %ERRORLEVEL% NEQ 0 goto error
@echo #切换到1.8完成#
@pause
@goto last
@:switchTo1.6
@SETX JAVA_HOME "C:\Program Files\Java\jdk1.6.0_43" /M
@IF %ERRORLEVEL% NEQ 0 goto error
@echo #切换到1.6完成#
@pause
@goto last
@:error
@echo 没有切换成功......
@goto last
@:last
@pause
如果你只有两个版本的jdk需要切换,那么将上⾯的路径修改下,改为⾃⼰的JDK安装路径就⾏了,再改下提⽰信息就ok了。
运⾏效果
因为修改的是系统变量,所以必须以管理员⾝份运⾏。运⾏完后可以使⽤java -version和javac -version验证是否起到作⽤,或者直接查看系统变量。这时可能你会发现java和javac验证出来的版本不⼀致,只有javac版本变了,解决⽅案是把path⾥⾯
的%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin提到path的开头,保存后就可以实现版本的同步了(这个解决⽅案来⾃)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。