一键部署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

猜你喜欢

转载自blog.csdn.net/q13554515812/article/details/83420957
今日推荐