在这个脚本中,有一个关键的命令,那就是SETX
java
在cmd窗口下输入SETX /?命令,能够看到如下的帮助信息shell
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) 在本地系统,用此工具建立或修改的变量将在之后的命令窗口可用,但 在当前的 CMD.exe 命令窗口。 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 "#$*." SETX IPGATEWAY /F ipconfig.out /R 0,7 Gateway SETX /S system /U user /P password /F c:\ipconfig.out /X
虽然是很长的一段,不过关键信息就是能够用SETX来设置系统变量。经过如下的这条命令,咱们能够对JAVA_HOME进行设置(固然前提是系统中有这个变量)dom
@SETX JAVA_HOME "V:\Program Files\Java\jdk1.8.0_77" /M
熟悉java配置的就会知道,经过配置JAVA_HOME咱们才能使用JDK来进行开发,也就是说,只要能经过命令来修改JAVA_HOME,那就能够自由的切换咱们想要的版本了。而后再在脚本中进行一些简单的判断就能够实现基本功能了。工具
如下是一个基本的脚本,实如今1.6和1.8之间的切换ui
@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了。spa
运行效果.net
由于修改的是系统变量,因此必须以管理员身份运行。运行完后可使用java -version和javac -version验证是否起到做用,或者直接查看系统变量。这时可能你会发现java和javac验证出来的版本不一致,只有javac版本变了,解决方案是把path里面的%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin提到path的开头,保存后就能够实现版本的同步了(这个解决方案来自连接)。code