在软件运行过程中,可能需要配置计算机的环境变量,在这里以配置Java环境变量为例讲解几种配置方式。
1. SET命令:这种语法只能在Cmd Shell环境中有效,关闭运行环境环境变量将不保存。
例子:
@echo off
set PATH=C:\Java\jdk1.8.0_31\bin
set /p cmd="环境变量设置完成,输入javac回车测试:"
%path%
@pause
设置用户环境变量
setx path "C:\Java\jdk1.8.0_31\bin"
设置系统环境变量
setx path "C:\Java\jdk1.8.0_31\bin" /m
注意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注意1.
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
效果和SETX一样,但是两者区别是setx直接生效,reg add 需要重启电脑。reg操作注册表需要管理员权限。
注意2.
如果路径中有空格时,需要用空格括起来。如下:
SET regPath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session" "Manager\Environment
以下为使用setx的一个完整例子
@ECHO OFF
echo.
echo **************************************************************
echo * 用于配置环境变量的批处理程序 *
echo * 配置JAVA环境变量输入: 1 *
echo * 配置Python环境变量输入:2 *
echo * 配置C环境变量输入: 3 *
echo * 以下注意事项: *
echo * 1)环境变量只对当前用户有效 *
echo * 2)配置前会先备份注册表(备份到所在文件夹的backup.reg) *
echo * 3)如配置有问题请运行backup.reg还原 *
echo * 4)有些杀毒软件会报安全警报,请点击信任 *
echo * --scott *
echo **************************************************************
SET /P inputKey="输入要配置的环境变量:"
::用户变量存储路径
SET regPath= HKEY_CURRENT_USER\Environment
::系统变量存储路径,路径中有空格要用引号括起来
::SET regPath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session" "Manager\Environment
set key=path
::判断用户配置的键(HKEY_CURRENT_USER\Environment\path)是否有值
reg query %regPath% /v %key% 1>nul 2>nul
if %ERRORLEVEL%==0 (
::取注册表中的键值(HKEY_CURRENT_USER\Environment\path)存入%oldValue%变量中
::复制内容后在末尾加上新的值再保存到path中,避免覆盖原值
For /f "tokens=3,4 delims= " %%v in ('Reg Query %regPath% /v %key% ') do Set oldValue=%%v
) else Set oldValue="."
if %inputKey%==1 ( goto java )
if %inputKey%==2 ( goto python )
if %inputKey%==3 ( goto c )
:java
SET /P JDKPath="请输入JDK安装路径,bin文件夹上一层(例如:C:\Java\jdk1.8.0_31) :"
::%~dp0指的当前目录
ECHO "备份注册表。。。"
reg export %regPath% %~dp0backup.reg
echo=
ECHO "设置JAVA_HOME"
SETX JAVA_HOME "%JDKPath%"
echo=
ECHO "设置CLASSPATH"
SETX CLASSPATH ".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar;%%JAVA_HOME%%\jre\lib\rt.jar"
echo=
ECHO "设置PATH"
::下面两种方式(setx、reg add )效果一样。不过setx会截断字符,1024字符以上的用reg add方式。
if "%oldValue%"==""."" ( SETX PATH "%%JAVA_HOME%%\bin" ) else SETX PATH "%oldValue%;%%JAVA_HOME%%\bin"
::if "%oldValue%"==""."" (reg add %regPath% /v Path /t REG_EXPAND_SZ /d "%%JAVA_HOME%%\bin" /f) else reg add %regPath% /v Path /t REG_EXPAND_SZ /d "%oldValue%;%%JAVA_HOME%%\bin" /f
echo=
SET /P a="配置已完成,按回车退出。。。"
::start "" "%JDKPath%\bin\javac.exe"
exit
:python
SET /P PyPath="请输入Python安装路径(例如:C:\Python) :"
ECHO "备份注册表。。。"
reg export %regPath% %~dp0backup.reg
echo=
ECHO "设置PATH"
::下面两种方式(setx、reg add )效果一样。不过setx会截断字符,1024字符以上的用reg add方式。
if "%oldValue%"==""."" (SETX PATH %PyPath%) else SETX PATH "%oldValue%;%PyPath%"
::if "%oldValue%"==""."" (reg add %regPath% /v Path /t REG_EXPAND_SZ /d "%PyPath%" /f) else reg add %regPath% /v Path /t REG_EXPAND_SZ /d "%oldValue%;%PyPath%" /f
echo=
SET /P a="配置已完成,按回车退出。。。"
::start "" "%PyPath%\python.exe"
exit
:c
SET /P CPath="请输入Dev-Cpp安装路径,bin文件夹上一层(例如:C:\Dev-Cpp) :"
ECHO "备份注册表。。。"
reg export %regPath% %~dp0backup.reg
echo=
ECHO "设置PATH"
::下面两种方式(setx、reg add )效果一样。不过setx会截断字符,1024字符以上的用reg add方式。
if "%oldValue%"==""."" (SETX PATH "%CPath%") else SETX PATH "%oldValue%;%CPath%\bin"
::if "%oldValue%"==""."" (reg add "%regPath%" /v Path /t REG_EXPAND_SZ /d "%CPath%\bin" /f) else reg add %regPath% /v "Path" /t REG_EXPAND_SZ /d "%oldValue%;%CPath%\bin" /f
echo=
SET /P a="配置已完成,按回车退出。。。"
::start "" "%CPath%\bin\gcc.exe"
exit
运行效果如下图: