1. 程式人生 > >一鍵部署JDK環境變數(windows)

一鍵部署JDK環境變數(windows)

一、基礎知識

在重灌系統後,可能需要配置計算機的環境變數,在這裡以配置Java環境變數為例講解幾種配置方式。
1.SET命令:這種語法只能在Cmd Shell環境中有效,關閉執行環境環境變數將不儲存。
例子:

@echo off
set PATH=C:\Java\jdk1.8.0_31\bin
set /p cmd="環境變數設定完成,輸入javac回車測試:"
%path%
@pause

2.SETX命令:Window XP 以上的系統都自帶了該命令(如果沒有,下載一個Setx.exe),這種方式為永久設定環境變數。
設定使用者環境變數
setx path “C:\Java\jdk1.8.0_31\bin”
設定系統環境變數
setx path “C:\Java\jdk1.8.0_31\bin” /m
SETX使用需要注意一下幾點:
1.在某些情況下會出現“setx 無效語法 預設選項不能超過’2’次”的錯誤,據信是因為原先的環境變數中存在空格導致的,可使用雙引號進行避免。
2.setx設定環境變數後,將在新開啟的終端中生效,當前終端不會立即生效。
3.setx在設定變數的長度超過1024,會擷取多出的字元。
4.setx還可以操作遠端計算機,具體引數設定百度一下setx用法。
5.setx在設定某一變數的值,如果已經存在該變數會覆蓋之前的值。所以正確方式是:要儲存值=獲取當前該變數的值+新值。
例如:set oldValue=獲取當前變數值
setx path %oldValue%;%newValue%
以下為獲取使用者環境變數path的值,該例子讀取登錄檔內的值。

@echo off
set regPath= HKEY_CURRENT_USER\Environment
set key=path

::判斷是否存在該路徑

reg query %regPath% /v  %key% 1>nul 2>nul
if %ERRORLEVEL%==0 (
For /f "tokens=3,4 delims= " %%v in ('Reg Query %regPath% /v %key% ') do Set oldValue=%%v 
) else Set oldValue=""
echo %key%的原值為:%oldValue%
pause

3.reg add :直接操作登錄檔,新增環境變數。
使用者環境變數登錄檔路徑

HKEY_CURRENT_USER\Environment

系統環境變數登錄檔路徑

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

例如:

@echo off
SET regPath= HKEY_CURRENT_USER\Environment
reg add %regPath% /v Path1 /t REG_EXPAND_SZ /d "%path%;C:\Java\jdk1.8.0_31\bin" /f
pause

使用reg操作登錄檔需要注意以下幾點:
1.效果和SETX一樣,但是兩者區別是setx直接生效,reg add 需要重啟電腦。reg操作登錄檔需要管理員許可權。
2.如果路徑中有空格時,需要用空格括起來。如下:

SET regPath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session" "Manager\Environment 

二、使用SETX配置JDK和安卓SDK環境變數實踐

@ECHO OFF
ECHO  *******************************************************************************
ECHO  * 用於配置環境變數的批處理程式
ECHO  * 配置JAVA環境變數請輸入:   1;
ECHO  * 配置安卓SDK環境變數請輸入:2;
ECHO  * 以下注意事項:
ECHO  * 1)配置環境變數前會先備份登錄檔(備份當前指令碼所在資料夾的backup.reg)
ECHO  * 2)如配置的環境變數有問題請執行backup.reg還原
ECHO  * 3)修改登錄檔,有些防毒軟體會報警,請點選信任
ECHO  *******************************************************************************

::使用者變數儲存路徑
SET userRegPath=HKEY_CURRENT_USER\Environment
::系統變數儲存路徑,路徑中有空格要用引號括起來
::SET systemRegPath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session" "Manager\Environment
::JDK預設安裝路徑
SET defaultJdkPath=C:\Program Files\Java\*
::登錄檔備份路徑,%~dp0指的當前目錄
SET regBakupPath=%~dp0backup.reg
::JDK環境變數CLASSPATH
SET CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
::配置JDK的path
SET configJdkPath=%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin;
::查詢登錄檔的關鍵字
SET key=path
::配置AndriodSdk的path
SET configAndriodSdkPath=%%ANDROID_SDK_HOME%%\platform-tools;%%ANDROID_SDK_HOME%%\tools


::使用關鍵字key查詢使用者環境變數登錄檔
REG QUERY %userRegPath% /v %key% 1>nul 2>nul
::若使用關鍵字key查詢使用者環境變數成功,將查詢出來變數的結果存到oldPathValue中
if %ERRORLEVEL%==0 (
	for /f "tokens=3 delims= " %%i in ('REG QUERY %userRegPath% /v %key%') DO (SET oldPathValue=%%i)
)


SET /P var="請輸入要配置的環境變數(1:JDK;2:安卓SDK):"
if "%var%" == "1" ( goto java )
if "%var%" == "2" ( goto andriod )


:java
FOR /d %%i IN ("%defaultJdkPath%") DO (ECHO %%i|FIND "jdk">NUL && SET JAVA_HOME=%%i) 
IF NOT DEFINEd JAVA_HOME (
	SET /P JAVA_HOME="預設路徑下沒有找到JDK,請輸入JDK的安裝路徑(如:C:\Program Files\Java\jdk1.8.0_73):"	
)
IF NOT EXIST "%JAVA_HOME%" (
	ECHO 輸入的JDK安裝路徑不存在,請檢查
	PAUSE
	EXIT
)
ECHO 備份組冊表...
REG EXPORT %userRegPath% "%regBakupPath%"
ECHO 新建環境變數JAVA_HOME
SETX JAVA_HOME "%JAVA_HOME%"
ECHO 新建環境變數CLASSPATH
SETX CLASSPATH "%CLASSPATH%"
ECHO 設定PATH
IF DEFINEd oldPathValue (
	SETX PATH "%oldPathValue%;%configJdkPath%"
) else SETX PATH "%configJdkPath%"
ECHO JDK環境變數配置成功!
EXIT


:andriod
SET /P ANDROID_SDK_HOME="請輸入ANDROID SDK的安裝路徑,platform-tools資料夾上一層(如:D:\Android\sdk\)"
ECHO 備份組冊表...
REG EXPORT %userRegPath% "%regBakupPath%"
ECHO 新建環境變數ANDROID_SDK_HOME
SETX ANDROID_SDK_HOME "%ANDROID_SDK_HOME%"
ECHO 設定PATH
IF DEFINEd oldPathValue (
	SETX PATH "%oldPathValue%;%configAndriodSdkPath%"
) else SETX PATH "%configAndriodSdkPath%"
ECHO ANDROID SDK環境變數配置成功! 
PAUSE
EXIT

三、ReadMe:

1.適用環境:windows作業系統;
2.適用於配置jdk和android sdk環境變數;
3.使用方式:雙擊指令碼按提示進行操作即可;

四、FAQ

Q:BAT指令碼中包含中文,執行後出現亂碼
R:檔案編碼問題;
S:將編碼改成ANSI格式;
Q:BAT指令碼中for命令中的變數寫成%i時,執行bat指令碼,直接閃退;
R:cmd命令列下必須使用%i ,批處理指令碼中必須使用%%i
S:解決方案:將%i修改%%i