2010-01-12 20 views
5

Bir şekilde Windows kayıt defterini okuyan ve bir Windows sisteminde hangi Java JDK'nın olduğunu algılayan ve sonra kullanıcıdan hangisini kullanmak istediğini seçtiğini ve seçimini hatırladığını gösteren bir toplu iş parçacığı snippet'i arıyorum.Java, REGEDIT.exe aracılığıyla bir toplu iş dosyasından nasıl yüklenir?

Şimdiye kadar sahip olduğum şeyler ... bazı değişikliklere ihtiyaç duyuyor. Bu betik sadece ilk JDK'yi bulur ... katları işlemez.

@echo off 
SETLOCAL EnableDelayedExpansion 
:: findJDK.bat 
start /w regedit /e reg1.txt "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" 
type reg1.txt | find "JavaHome" > reg2.txt 
if errorlevel 1 goto ERROR 
for /f "tokens=2 delims==" %%x in (reg2.txt) do (
    set JavaTemp=%%~x 
    echo Regedit: JAVA_HOME path : !JavaTemp! 
) 
if errorlevel 1 goto ERROR 
echo. 
set JAVA_HOME=%JavaTemp% 
set JAVA_HOME=%JAVA_HOME:\\=\% 
echo JAVA_HOME was found to be %JAVA_HOME% 
goto END 
:ERROR 
echo reg1.txt is: & type reg1.txt 
echo reg2.txt is: & type reg2.txt 
echo 
:END 
del reg2.txt 
del reg1.txt 
pause>nul 

cevap

2

Tamam, sonunda cevabı çözdüm. Bir süre aldı ve bu kod gerçekten kaba ama işe yarıyor. Birisi bunu geliştirmek istiyorsa, onlara şu cevabı vereceğim:

@ECHO off 
SET TITLE=detectJDK.bat 
TITLE=%TITLE% 
SETLOCAL ENABLEDELAYEDEXPANSION 
IF EXIST jdkhome.txt (
    ECHO JDK home already set in jdkhome.txt file. 
    GOTO :END 
) 
ECHO. 2>merged.txt 
ECHO. 2>list.txt 
ECHO. 2>uniquelist.txt 
IF NOT EXIST reg32.txt ECHO. 2>reg32.txt 
IF NOT EXIST reg64.txt ECHO. 2>reg64.txt 
START /w REGEDIT /e reg32.txt "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft\Java Development Kit" 
TYPE reg32.txt | FIND "JavaHome" > merged.txt 
START /w REGEDIT /e reg64.txt "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" 
TYPE reg64.txt | FIND "JavaHome" >> merged.txt 
FOR /f "tokens=2 delims==" %%x IN (merged.txt) DO (
    CALL :STRIP "%%~x" >>list.txt 
) 

FOR /F "tokens=* delims= " %%a IN (list.txt) DO (
    SET str=%%a 
    FIND /I ^"!str!^" list.txt>nul 
    FIND /I ^"!str!^" uniquelist.txt>nul 
    IF ERRORLEVEL 1 ECHO !str!>>uniquelist.txt 
) 

ECHO Select a JDK from the list: 
SET /A COUNT=0 
FOR /f "tokens=1,* delims=" %%y IN (uniquelist.txt) DO (
    SET /A COUNT += 1 
    ECHO !COUNT!: %%~y 
) 
SET /P NUMBER=Type a number here: 
SET /A COUNT=0 
FOR /f "tokens=1,* delims=" %%z IN (uniquelist.txt) DO (
    SET /A COUNT += 1 
    IF !COUNT!==!NUMBER! (
    SET JAVA_HOME=%%~z 
) 
) 
ECHO. 
ECHO JAVA_HOME was found to be %JAVA_HOME% 
ECHO %JAVA_HOME%>jdkhome.txt 
GOTO CLEANUP 

:CLEANUP 
DEL /Q merged.txt 
DEL /Q list.txt 
DEL /Q uniquelist.txt 
DEL /Q reg32.txt 
DEL /Q reg64.txt 
GOTO :END 

:: Strip quotes and extra backslash from string 
:STRIP 
SET n=%~1 
SET n=%n:\\=\% 
SET n=%n:"=% 
IF NOT "%n%"=="" ECHO %n% 
GOTO :EOF 

:END 
FOR /l %%a in (5,-1,1) do (TITLE %TITLE% -- Closing in %%as&ping -n 2 -w 1 127.0.0.1>NUL) 
:: end 
1

Sen kayıt

+0

Yukarıdaki örnekte ne yaptığım. daha dahice bir fikir umuyoruz ... – djangofan

0

yılında JavaSoft \ Java Runtime Environment \ HKEY_LOCAL_MACHINE \ SOFTWARE altında girdileri kontrol edebilir Gerçekten Windows kayıt kullanmama gerek var mı? Değilse, JAVA_HOME ve/veya JDK_HOME ortam değişkenlerinin varlığını kontrol edebilirsiniz. Varsa, Java yüklemesinin yükleme dizinine işaret ederler ve muhtemelen kullanıcının işaret ettiği Java kurulumunun kullanmak istediği gibi olduğunu varsayabilirsiniz.

+0

Amacım bunu ilk olarak filtrelemektir, ancak eğer mevcut değilse o zaman kayıt defterini aramak ve dosya araması yapmak ve dosya sisteminin kabul edip etmediğini görmek için karşılaştırmak istiyorum. – djangofan

İlgili konular