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