批处理切换JDK版本

好吧,之前讲了因为机器安装了好多IDE,相应还有不同版本的应用服务器像tomcat6,7,resin,apache,发现为了正常使用这些东档需要JDK在32位和64位,版本6和版本7之间反复切换,还烦,于是简单写了下面这个批处理。

点击(此处)折叠或打开

  1. echo off

  2. rem window系统下切换JDk版本
  3. rem by machoyt 20150120

  4. color 0a
  5. mode con cols=80 lines=20
  6. echo 当前JDK 版本:
  7. java -version
  8. ping 127.0.0.1 -n 2 -w 1000 > nul
  9. echo.

  10. :init
  11. set JAVA_HOME_1.6=C:\Program Files (x86)\Java\jdk1.6.0
  12. set JAVA_HOME_1.7=C:\Program Files (x86)\Java\jdk1.7.0_25
  13. set JAVA_HOME_1.8=C:\Program Files\Java\jdk1.8.0_25

  14. :menu
  15. echo =============================================
  16. echo 请选择要切换的jdk版本
  17. echo 1:版本1.6
  18. echo 2:版本1.7
  19. echo 3: 版本1.8
  20. echo 4: 取消
  21. echo =============================================
  22. set /p ch=请输入1、2、3选择相应版本,输入4退出
  23. if "%ch%"=="1" set var=%JAVA_HOME_1.6% && goto enable
  24. if "%ch%"=="2" set var=%JAVA_HOME_1.7% && goto enable
  25. if "%ch%"=="3" set var=%JAVA_HOME_1.8% && goto enable
  26. if "%ch%"=="4" goto exit
  27. echo 请确认您的输入
  28. goto menu

  29. :enable
  30. rem start /I /WAIT /B wmic ENVIRONMENT where name='JAVA_HOME' set VariableValue="%var%"
  31. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_HOME /t reg_sz /d "%var%" /f && ^
  32. echo 已经成功为您切换了JDK版本,系统即将退出: && ping 127.1 -n 3 > nul && goto exit

  33. :exit
和上一篇文章一样,因为这个富文本框的代码规范,非要给我的符号加上转义\,简直无语。
.bat文件亲测win7,xp正常运行,win7还要使用管理员权限。不想再吐槽了。
如果有不正常的地方请仔细检查是不是因为转义符的原因。好烦

还要再说一下,这样从注册表里修改了JAVA_HOME环境变量,改变是持续性的,而不是仅在当前CMD窗口下生效。但是:
通常会发现切换之后环境变量是修改过来了,但是还是使用java -version时发现并没有改过来,这时请检查:

1,你的系统目录下是不是有java.exe等文件。好像JAVA8安装后会把java.exe等文件直接拷到system32下,这简直无语.
碰到这种情况,请把path环境变量中,Java的相关配置放到最前面。(%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;放到最前面)
2,这样处理之后还是有延迟才能起作用啊啊阿。
这种情况也是莫名其妙的,每次修改完以后还要在我的电脑->系统属性->高级->环境变量窗口点确定才能真正生效(即:java -version才会出现你所切换的JDK版本)
使用spy++跟踪系统事件,发现每次单击的时候其实是发送了一条消息。sendmessage,这是Win32 编程的一个接口方法,具体使用还得通过相应的高级语言去弄,好烦
我写批处理不就是图个轻松简单么,还要这么搞,烦
像什么taskkill /f /im explorer.exe之后再启动explore.exe亲测是没有什么作用的。
关于这个问题,下一步我给出Java的解决方法吧。

最后,会发现在前面常量定义块:init里 set JAVA_HOME_1.6=C:\Program Files (x86)\Java\jdk1.6.0都给出了具体的目录,这些是你JDK安装目录(JAVA_HOME) ,相信我,自己手写会比机器扫描快一万倍,事实上我之前写了一个扫描的批处理,后来又想,这样既增加了代码的复杂程度,又增大了系统开销,跟简单明了的初衷严重不符,于是就手写了。

考虑一个问题,程序运行要使用Java环境,会从那里读环境变量呢?所以这样修改之后虽然自己测试感觉有延迟作用,但实际上是可用的!!!!!
为什么,到底发生了什么情况.........................

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29209660/viewspace-1409394/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29209660/viewspace-1409394/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值