作者:朱金灿

 

   

           从网上搜了一些资料,再修改测试,终于通过了win7系统的测试。代码如下:

 

 

@echo off

rem 本批处理文件目的为了增加Java开发的三个相关环境变量:JAVA_HOME、CLASS_PATH和Path

rem 作者:朱金灿,如有问题请发邮件:clever101@163.com

@set Path_=%javaPath%\bin;%javaPath%\jre\bin

@reg add "HKLM\system\controlset001\control\session manager\environment" /v JAVA_HOME /t reg_sz /d "%javaPath%" /f 

rem 查询Path环境变量的所有路径
@set Path_=%javaPath%\bin
for,/f,"tokens=1,2,* delims=	 ",%%a,in,('reg query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment" /v Path'),do,(
        @set PathAll_=%%c 
    )

rem 去除路径的最后的空格

:intercept 
if "%PathAll_:~-1%"==" " set "PathAll_=%PathAll_:~0,-1%"&goto intercept

rem 判断java的相关路径是否在Path环境变量下,如果不在则添加进来
echo %PathAll_%|find /i "%Path_%" && set IsNull=true|| set IsNull=false 
    if not %IsNull%==true ( 
       reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%PathAll_%;%Path_%" /f 
    ) 
    if not %IsNull%==false (echo "Java的bin路径已经在Path环境变量中")

@reg add "HKLM\system\controlset001\control\session manager\environment" /v CLASSPATH /t reg_expand_sz /d "%javaPath%\lib\dt.jar;%javaPath%\lib\tools.jar;." /f 

rem 刷新注册表

taskkill /f /im explorer.exe

start explorer.exe

RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters

pause 

for,/f,"tokens=1,2,* delims=(Tab)(空格)",%%a,in,('reg query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment" /v Path')

 

 

    这一句的作用是遍历注册表HKLM\SYSTEM\ControlSet001\Control\Session Manager\Environment中的Path变量的所有文本,并以Tab+空格做分隔符,取出第1、2和剩余部分,分别存放在a、b、c变量中。如图2-1:

批处理实现添加java环境变量_分隔符

图2-1

    因此%%a,代表Path,%%b代表REG_SZ,%%c代表 C:\Windows\System32;D:\Program Files。

    必须注意 delims=(Tab)(空格)" ,这里必须是先一个tab后再加空格,不然一定会报错的。

    另外注意,因为上面的对Path的分割用的是(Tab)(空格),for语句写成如下:

for,/f,"tokens=1,2,3 delims=(Tab)(空格)",%%a,in(略)

这里%%c取得的值将是 “C:\Windows\System32;D:\Program”,原因是Program Files中出现了一个空格。

神说,这里因为delims默认的分隔符是空格和tab键,这个地方注意一下!