如何寫一個切換JDK版本的bat腳本

在這個腳本中,有一個關鍵的命令,那就是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

相關文章
相關標籤/搜索