如何写一个切换jdk版本的bat脚本
1个回答
展开全部
SetX有三种使用方式:
语法1:
SETX[/Ssystem[/U[domain/]user[/P[password]]]]varvalue[/M]
语法2:
SETX[/Ssystem[/U[domain/]user[/P[password]]]]var/Kregpath[/M]
语法3:
SETX[/Ssystem[/U[domain/]user[/P[password]]]]
/Ffile{var{/Ax,y|/Rx,ystring}[/M]|/X}[/Ddelimiters]
描述:
在用户或系统环境创建或修改环境变量。能基于参数、注册表项或文件输
入设置变量。
参数列表:
/Ssystem指定要连接到的远程系统。
/U[domain/]user指定应该在哪个用户上下文执行命令。
/P[password]指定给定用户上下文的密码。如果省略则
提示输入。
var指定要设置的环境变量。
value指定分配给环境变量的值。
/Kregpath指定变量是基于注册表项的信息而设置的。
路径的格式应该是hive/key/.../value。例如
HKEY_LOCAL_MACHINE/System/CurrentControlSet/
Control/TimeZoneInformation/StandardName。
/Ffile指定要使用的文本文件的文件名。
/Ax,y指定绝对文件坐标(线X,项目Y)作为在此文件
里搜索的参数。
/Rx,ystring指定有关“字符串”作为搜索参数的相对文件坐标。
/M指定应该在系统(HKEY_LOCAL_MACHINE)环境中设
置此变量。在HKEY_CURRENT_USER环境下,默认
将设置此变量。
/X用x,y坐标显示文件内容。
/Ddelimiters指定其他限定符,如","或"/"。
内置分隔符是空格、制表符、回车和换行符。所有
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的值是从注册表里以十进制格式提取出来的。
示例:
SETXMACHINECOMPAQ
SETXMACHINE"COMPAQCOMPUTER"/M
SETXMYPATH"%PATH%"
SETXMYPATH~PATH~
SETX/Ssystem/Uuser/PpasswordMACHINECOMPAQ
SETX/Ssystem/Uuser/PpasswordMYPATH^%PATH^%
SETXTZONE/KHKEY_LOCAL_MACHINE/System/CurrentControlSet/
Control/TimeZoneInformation/StandardName
SETXBUILD/K"HKEY_LOCAL_MACHINE/Software/Microsoft/Windows
NT/CurrentVersion/CurrentBuildNumber"/M
SETX/Ssystem/Uuser/PpasswordTZONE/KHKEY_LOCAL_MACHINE/
System/CurrentControlSet/Control/TimeZoneInformation/
StandardName
SETX/Ssystem/Uuser/PpasswordBUILD/K
"HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/
CurrentVersion/CurrentBuildNumber"/M
SETX/Fipconfig.out/X
SETXIPADDR/Fipconfig.out/A5,11
SETXOCTET1/Fipconfig.out/A5,3/D"#$*."
SETXIPGATEWAY/Fipconfig.out/R0,7Gateway
SETX/Ssystem/Uuser/Ppassword/Fc:/ipconfig.out/X
虽然是很长的一段,不过关键信息就是可以用SETX来设置系统变量。通过以下的这条命令,我们可以对JAVA_HOME进行设置(当然前提是系统中有这个变量)
@SETXJAVA_HOME"V:/ProgramFiles/Java/jdk1.8.0_77"/M
熟悉java配置的就会知道,通过配置JAVA_HOME我们才能使用JDK来进行开发,也就是说,只要能通过命令来修改JAVA_HOME,那就可以自由的切换我们想要的版本了。然后再在脚本中进行一些简单的判断就可以实现基本功能了。
以下是一个基本的脚本,实现在1.6和1.8之间的切换
@ECHO========请以管理员权限运行========
@titleJAVA_HOMESWITCH
@color07
@ECHO请选择
@ECHO1.JDK1.8
@ECHO2.JDK1.6
@CHOICE/C12
@IFERRORLEVEL2gotoswitchTo1.6
@IFERRORLEVEL1gotoswitchTo1.8
@:switchTo1.8
@SETXJAVA_HOME"V:/ProgramFiles/Java/jdk1.8.0_77"/M
@IF%ERRORLEVEL%NEQ0gotoerror
@echo#切换到1.8完成#
@pause
@gotolast
@:switchTo1.6
@SETXJAVA_HOME"C:/ProgramFiles/Java/jdk1.6.0_43"/M
@IF%ERRORLEVEL%NEQ0gotoerror
@echo#切换到1.6完成#
@pause
@gotolast
@:error
@echo没有切换成功......
@gotolast
@:last
@pause
如果你只有两个版本的jdk需要切换,那么将上面的路径修改下,改为自己的JDK安装路径就行了,再改下提示信息就ok了。
运行效果
因为修改的是系统变量,所以必须以管理员身份运行。运行完后可以使用java -version和javac -version验证是否起到作用,或者直接查看系统变量。这时可能你会发现java和javac验证出来的版本不一致,只有javac版本变了,解决方案是把path里面的%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin提到path的开头,保存后就可以实现版本的同步了
语法1:
SETX[/Ssystem[/U[domain/]user[/P[password]]]]varvalue[/M]
语法2:
SETX[/Ssystem[/U[domain/]user[/P[password]]]]var/Kregpath[/M]
语法3:
SETX[/Ssystem[/U[domain/]user[/P[password]]]]
/Ffile{var{/Ax,y|/Rx,ystring}[/M]|/X}[/Ddelimiters]
描述:
在用户或系统环境创建或修改环境变量。能基于参数、注册表项或文件输
入设置变量。
参数列表:
/Ssystem指定要连接到的远程系统。
/U[domain/]user指定应该在哪个用户上下文执行命令。
/P[password]指定给定用户上下文的密码。如果省略则
提示输入。
var指定要设置的环境变量。
value指定分配给环境变量的值。
/Kregpath指定变量是基于注册表项的信息而设置的。
路径的格式应该是hive/key/.../value。例如
HKEY_LOCAL_MACHINE/System/CurrentControlSet/
Control/TimeZoneInformation/StandardName。
/Ffile指定要使用的文本文件的文件名。
/Ax,y指定绝对文件坐标(线X,项目Y)作为在此文件
里搜索的参数。
/Rx,ystring指定有关“字符串”作为搜索参数的相对文件坐标。
/M指定应该在系统(HKEY_LOCAL_MACHINE)环境中设
置此变量。在HKEY_CURRENT_USER环境下,默认
将设置此变量。
/X用x,y坐标显示文件内容。
/Ddelimiters指定其他限定符,如","或"/"。
内置分隔符是空格、制表符、回车和换行符。所有
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的值是从注册表里以十进制格式提取出来的。
示例:
SETXMACHINECOMPAQ
SETXMACHINE"COMPAQCOMPUTER"/M
SETXMYPATH"%PATH%"
SETXMYPATH~PATH~
SETX/Ssystem/Uuser/PpasswordMACHINECOMPAQ
SETX/Ssystem/Uuser/PpasswordMYPATH^%PATH^%
SETXTZONE/KHKEY_LOCAL_MACHINE/System/CurrentControlSet/
Control/TimeZoneInformation/StandardName
SETXBUILD/K"HKEY_LOCAL_MACHINE/Software/Microsoft/Windows
NT/CurrentVersion/CurrentBuildNumber"/M
SETX/Ssystem/Uuser/PpasswordTZONE/KHKEY_LOCAL_MACHINE/
System/CurrentControlSet/Control/TimeZoneInformation/
StandardName
SETX/Ssystem/Uuser/PpasswordBUILD/K
"HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/
CurrentVersion/CurrentBuildNumber"/M
SETX/Fipconfig.out/X
SETXIPADDR/Fipconfig.out/A5,11
SETXOCTET1/Fipconfig.out/A5,3/D"#$*."
SETXIPGATEWAY/Fipconfig.out/R0,7Gateway
SETX/Ssystem/Uuser/Ppassword/Fc:/ipconfig.out/X
虽然是很长的一段,不过关键信息就是可以用SETX来设置系统变量。通过以下的这条命令,我们可以对JAVA_HOME进行设置(当然前提是系统中有这个变量)
@SETXJAVA_HOME"V:/ProgramFiles/Java/jdk1.8.0_77"/M
熟悉java配置的就会知道,通过配置JAVA_HOME我们才能使用JDK来进行开发,也就是说,只要能通过命令来修改JAVA_HOME,那就可以自由的切换我们想要的版本了。然后再在脚本中进行一些简单的判断就可以实现基本功能了。
以下是一个基本的脚本,实现在1.6和1.8之间的切换
@ECHO========请以管理员权限运行========
@titleJAVA_HOMESWITCH
@color07
@ECHO请选择
@ECHO1.JDK1.8
@ECHO2.JDK1.6
@CHOICE/C12
@IFERRORLEVEL2gotoswitchTo1.6
@IFERRORLEVEL1gotoswitchTo1.8
@:switchTo1.8
@SETXJAVA_HOME"V:/ProgramFiles/Java/jdk1.8.0_77"/M
@IF%ERRORLEVEL%NEQ0gotoerror
@echo#切换到1.8完成#
@pause
@gotolast
@:switchTo1.6
@SETXJAVA_HOME"C:/ProgramFiles/Java/jdk1.6.0_43"/M
@IF%ERRORLEVEL%NEQ0gotoerror
@echo#切换到1.6完成#
@pause
@gotolast
@:error
@echo没有切换成功......
@gotolast
@:last
@pause
如果你只有两个版本的jdk需要切换,那么将上面的路径修改下,改为自己的JDK安装路径就行了,再改下提示信息就ok了。
运行效果
因为修改的是系统变量,所以必须以管理员身份运行。运行完后可以使用java -version和javac -version验证是否起到作用,或者直接查看系统变量。这时可能你会发现java和javac验证出来的版本不一致,只有javac版本变了,解决方案是把path里面的%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin提到path的开头,保存后就可以实现版本的同步了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询