2010-01-12 5 views
5

मैं बैच फ़ाइल स्निपेट की तलाश में हूं जो किसी भी तरह से विंडोज रजिस्ट्री को पढ़ता है और यह पता लगाता है कि कौन सी जावा जेडीके विंडोज सिस्टम पर है और फिर उस उपयोगकर्ता से पूछता है जिसे वह उपयोग करना चाहता है और पसंद को याद करता है।जावा का पता लगाने के लिए बैच फ़ाइल से REGEDIT.exe के माध्यम से स्थापित किया गया है?

यहां मेरे पास अभी तक है ... कुछ संशोधनों की आवश्यकता है। यह स्क्रिप्ट केवल पहला जेडीके पाता है ... यह गुणकों को संभाल नहीं करता है।

@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 

उत्तर

2

ठीक है, आखिरकार मैंने जवाब निकाला। इसमें कुछ समय लगा, और यह कोड वास्तव में मोटा है, लेकिन यह काम करता है। अगर कोई इसे सुधारना चाहता है, तो मैं उन्हें उत्तर अंक प्रदान करूंगा:

@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

आप रजिस्ट्री

+0

जो ऊपर दिए गए उदाहरण में मैं कर रहा हूं। मैं एक और सरल विचार की उम्मीद कर रहा हूं ... – djangofan

0

में \ JavaSoft \ जावा रनटाइम एनवायरनमेंट HKEY_LOCAL_MACHINE \ SOFTWARE के तहत प्रविष्टियों की जांच कर सकता तुम सच में Windows रजिस्ट्री का उपयोग करने की आवश्यकता है? यदि नहीं, तो आप JAVA_HOME और/या JDK_HOME पर्यावरण चर के अस्तित्व की जांच कर सकते हैं। यदि वे मौजूद हैं, तो वे जावा इंस्टॉलेशन की स्थापना निर्देशिका को इंगित करते हैं, और आप शायद यह मान सकते हैं कि वे जावा इंस्टॉलेशन को इंगित करते हैं, जिसे उपयोगकर्ता उपयोग करना चाहता है।

+0

मेरा इरादा उस के लिए फ़िल्टर करना है, लेकिन यदि वे मौजूद नहीं हैं तो मैं रजिस्ट्री को खोजना चाहता हूं और फ़ाइल खोज करना चाहता हूं और यह देखने के लिए तुलना कर सकता हूं कि फ़ाइल सिस्टम सहमत है या नहीं। – djangofan

संबंधित मुद्दे

 संबंधित मुद्दे