@ECHO OFF
echo.
echo **************************************************************
echo * 用于配置环境变量的预处理程序 *
echo * 以下注意事项: *
echo * 1)环境变量只对当前用户有效 *
echo * 2)配置前会先备份注册表(备份到所在文件夹的backup.reg) *
echo * 3)如配置有问题请运行backup.reg还原 *
echo * 4)有些杀毒软件会报安全警报,请点击信任 *
echo **************************************************************
::SET /P inputKey="输入要配置的环境变量:"
::用户变量存储路径
SET regPath= HKEY_CURRENT_USER\Environment
::系统变量存储路径,路径中有空格要用引号括起来
::SET regPath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session" "Manager\Environment
:: 取path的值
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="."
:: 取classpath的值
set keyc=classpath
::判断用户配置的键(HKEY_CURRENT_USER\Environment\path)是否有值
reg query %regPath% /v %keyc% 1>nul 2>nul
if %ERRORLEVEL%==0 (
::取注册表中的键值(HKEY_CURRENT_USER\Environment\classpath)存入%oldclasspath%变量中
::复制内容后在末尾加上新的值再保存到path中,避免覆盖原值
For /f "tokens=3,4 delims= " %%v in ('Reg Query %regPath% /v %keyc% ') do Set oldclasspath=%%v
) else Set oldclasspath="."
set jrepath=%cd%\jre\bin\server
set dllpath=%cd%\dll
::%~dp0指的当前目录
ECHO "备份注册表。。。"
reg export %regPath% %~dp0backup.reg
::下面两种方式(setx、reg add )效果一样。不过setx会截断字符,1024字符以上的用reg add方式。使用reg add需要管理员权限,且要重启电脑
:: setx 方式
::goto setx_type
echo=
ECHO "设置CLASSPATH"
if "%oldclasspath%"==""."" (
SETX CLASSPATH "%jrepath%"
) else (
echo;%oldclasspath%|find "%jrepath%">nul&&echo;exist||SETX CLASSPATH "%jrepath%";"%oldclasspath%"
)
echo=
ECHO "设置PATH"
if "%oldValue%"==""."" (
SETX PATH "%jrepath%;%dllpath%"
) else (
echo;%oldValue%|find "%jrepath%">nul&&echo;exist||SETX PATH "%jrepath%;%dllpath%";"%oldValue%"
)
:::setx_type
:: reg add 方式
goto reg_add
echo=
ECHO "设置CLASSPATH"
if "%oldclasspath%"==""."" (
reg add %regPath% /v CLASSPATH /t REG_EXPAND_SZ /d %jrepath% /f
) else (
echo;%oldclasspath%|find "%jrepath%">nul&&echo;exist||reg add %regPath% /v CLASSPATH /t REG_EXPAND_SZ /d "%jrepath%";"%oldclasspath%" /f
)
echo=
ECHO "设置PATH"
if "%oldValue%"==""."" (
reg add %regPath% /v Path /t REG_EXPAND_SZ /d "%jrepath%;%dllpath%" /f
) else (
echo;%oldValue%|find "%jrepath%">nul&&echo;exist||reg add %regPath% /v Path /t REG_EXPAND_SZ /d "%jrepath%;%oldValue%;%dllpath%" /f
)
:reg_add
echo=
SET /P a="配置已完成,按回车退出。。。"
exit