文档章节

如何写一个切换JDK版本的bat脚本

idaren
 idaren
发布于 2016/04/17 01:11
字数 1214
阅读 327
收藏 13

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

在这个脚本中,有一个关键的命令,那就是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) 在本地系统,用此工具创建或修改的变量将在以后的命令窗口可用,但
         在当前的 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进行设置(当然前提是系统中有这个变量)

@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的开头,保存后就可以实现版本的同步了(这个解决方案来自链接)。

© 著作权归作者所有

idaren
粉丝 1
博文 16
码字总数 14680
作品 0
广州
程序员
私信 提问
在windows中使用Intellij Idea时选择自定义的64位JVM(转)

本文英文原文自:https://intellij-support.jetbrains.com/entries/23455956-Selecting-the-JDK-version-the-IDE-will-run-under 在java开发过程中,我们一般使用32位的jdk,因为开发过程中需要...

wangyue_1
2016/09/21
33
0
win10 开机无法加载jdk

用心爱的笔记本进行机器学习训练,导致win10开机直逼2分钟,卡顿2分钟,泪奔,作为一个程序员,实在无法忍受。换系统。 找好朋友要了个系统,新系统各种清爽,10秒内开机,20秒能用,爽歪歪。...

悲喜世界
2018/11/22
20
0
SQLServer低版本附加高版本的数据库常用处理方法

SqlServer低版本数据库不能直接还原或附加Sql高版本数据库或备份文件,我们常用DTS互导的方式,如果不同版本数据库不可访问,可以使用高版本数据库的DTS导出整个库的相应低版本建库脚本与数据...

NET快速开发框架
2018/11/25
0
0
渣渣菜鸡的 ElasticSearch 源码解析 —— 环境搭建

软件环境 1、Intellij Idea:2018.2版本 2、Elasticsearch 源码版本: 6.3.2 3、JDK:10.0.2 4、Gradle : 建议 4.5 及以上版本 5、Macbook Pro 2017 安装 ElasticSearch 去 https://www.elasti......

技术小能手
2018/08/16
0
0
用bat修改JDK的版本(win 7)

直接贴bat的代码吧!注意:我这个是已经在环境变量中配好了JDK的各种变量,只是想任意切换JDK版本而已! @echo off set regpath=HKEYLOCALMACHINESYSTEMCurrentControlSetControlSession Ma...

Sheamus
2015/06/15
227
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
5
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
5
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
14
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
9
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部