posts - 41,  comments - 40,  trackbacks - 0

          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          :: Author: NeedJava
          ::
          :: Modified: 2007-07-07
          ::
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          @ECHO OFF


          SETLOCAL EnableDelayedExpansion

          ECHO 搜索可用的〔JRE〕路徑,按任意鍵繼續。

          PAUSE>NUL


          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          :: 先找到java.exe文件,得到主要路徑,然后根據java.exe附近一些有特點的文件,
          ::
          :: 來判斷是否是有效的路徑。
          ::
          :: 沒辦法識別人為制造的惡意路徑,除非每個文件都用MD5辨認。
          ::
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          DEL /F /Q JRE.txt 2>NUL

          FOR %%a IN ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) DO (

          ??? IF EXIST "%%a:\" (

          ?????? ECHO 正在〔%%a:〕盤下搜索……

          ?????? FOR /F "delims=" %%b IN ( 'DIR /A-D /B /S "%%a:\java.exe" 2^>NUL' ) DO (

          ?????????? SET "JRELocation=%%~dpb"

          REM??????? ECHO [%%~fb] & ECHO [!JRELocation!] & PAUSE

          REM??????? :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          REM??????? ::
          REM??????? :: 去除末尾的“\bin\”
          REM??????? ::
          REM??????? :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          REM??????? IF /I "!JRELocation:~5!"=="\bin\" (
          REM
          REM?????????? SET "JRELocation=!JRELocation:~0,5!"
          REM
          REM?????????? ECHO [!JRELocation!] & PAUSE
          REM
          REM??????? )

          REM??????? :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          REM??????? ::
          REM??????? :: 這是JDK內含的JRE
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jdk1.5.0_12\bin\java.exe
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jdk1.5.0_12\jre\bin\java.dll
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jdk1.5.0_12\jre\bin\client\jvm.dll
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jdk1.5.0_12\jre\lib\rt.jar
          REM??????? ::
          REM??????? :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ?????????? IF EXIST "!JRELocation!\..\jre\bin\java.dll" (

          ????????????? IF EXIST "!JRELocation!\..\jre\bin\client\jvm.dll" (

          ???????????????? IF EXIST "!JRELocation!\..\jre\lib\rt.jar" (

          ??????????????????? CALL :version !JRELocation!

          ???????????????? )

          ????????????? )

          ?????????? )

          REM??????? :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          REM??????? ::
          REM??????? :: 這是單獨的JRE,必須剔除JDK內含JRE的情況,防止重復
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jre1.5.0_12\bin\java.exe
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jre1.5.0_12\bin\java.dll
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jre1.5.0_12\bin\client\jvm.dll
          REM??????? ::
          REM??????? :: C:\Program Files\Java\jre1.5.0_12\lib\rt.jar
          REM??????? ::
          REM??????? :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ?????????? IF EXIST "!JRELocation!\java.dll" (

          ????????????? IF EXIST "!JRELocation!\client\jvm.dll" (

          ???????????????? IF EXIST "!JRELocation!\..\lib\rt.jar" (

          ??????????????????? IF NOT EXIST "!JRELocation!\..\..\bin\java.exe" (

          ?????????????????????? CALL :version !JRELocation!

          ??????????????????? )

          ???????????????? )

          ????????????? )

          ?????????? )

          ?????? )

          ??? )

          )

          GOTO :show


          :version
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          :: JAVA.EXE -version不是用標準輸出流,而是用標準錯誤輸出流
          ::
          :: 所以如果要輸出到文件,必須用錯誤流,即2>。輸出類似如下:
          ::
          :: java version "1.5.0_12"
          ::
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ECHO Found JRE: [%*]

          IF NOT "!JRELocation!"=="" IF "!JRELocation!"=="%*" (

          ?? "!JRELocation!\JAVA.EXE" -version 2>versionErr.txt 1>versionOut.txt

          ?? FOR /F "tokens=1,2,3,4* delims= " %%a IN ( versionErr.txt versionOut.txt ) DO (

          ?????? IF /I "%%a"=="java" IF /I "%%b"=="version" (

          ????????? SET "JREVersion=%%~c"

          ????????? ECHO JRE Version: [!JREVersion!] & ECHO.

          ????????? ECHO !JREVersion!^?!JRELocation!>>JRE.txt

          ?????? )

          ?? )

          ?? DEL /F /Q versionErr.txt 2>NUL

          ?? DEL /F /Q versionOut.txt 2>NUL

          )

          GOTO :EOF


          :show
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          :: 不建議用START.EXE命令,防止關聯被篡改,直接調用記事本NOTEPAD.EXE打開。
          ::
          :: 其實后面用不著這個,這里只是為了方便查看。
          ::
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          IF EXIST JRE.txt "%SystemRoot%\NOTEPAD.EXE" JRE.txt


          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          :: 下一步,就是自動設置環境變量path,使用INF文件改注冊表,如下:
          ::
          :: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path:
          ::
          :: "%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;"
          ::
          :: 可以讀出找到的JRE,讓使用者自己選擇用哪個JRE,用到的命令FOR、SET /P,以后再寫……
          ::
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


          @ECHO ON

          ?

          ?
          posted on 2007-07-05 16:28 NeedJava 閱讀(1151) 評論(0)  編輯  收藏 所屬分類: DOS Windows
          主站蜘蛛池模板: 南木林县| 武平县| 青神县| 济阳县| 清原| 开江县| 安远县| 永州市| 正镶白旗| 彭水| 姜堰市| 扎兰屯市| 平邑县| 广河县| 准格尔旗| 泰来县| 松原市| 马鞍山市| 砀山县| 耒阳市| 长顺县| 石渠县| 灵宝市| 铁岭市| 枣阳市| 遂昌县| 启东市| 都兰县| 通江县| 图们市| 天祝| 合山市| 苏尼特左旗| 吉木乃县| 治县。| 太保市| 长海县| 西平县| 缙云县| 始兴县| 潼关县|