::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: 先找到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 閱讀(1146)
評論(0) 編輯 收藏 所屬分類:
DOS Windows