سؤال

أريد تعيين متغير JAVA_HOME من برنامج نصي دفعي

هل كانت مفيدة؟

المحلول

وهذه قصاصة سيتم البحث في PATH الحالي لJAVA.EXE، وطباعة حيث تم العثور عليه:

for /f %%j in ("java.exe") do @echo.%%~dp$PATH:j

في نظام بلدي هذا يعطيني

<اقتباس فقرة>   

وC: \ WINDOWS \ SYSTEM32 \

وباستخدام هذا يمكنك تحديد JAVA_HOME كما يلي:

@echo off

for /f %%j in ("java.exe") do (
    set JAVA_HOME=%%~dp$PATH:j
)

if %JAVA_HOME%.==. (
    @echo java.exe not found
) else (
    @echo JAVA_HOME = %JAVA_HOME%
)

نصائح أخرى

الحصول على نسخة جافا الحالي من ملف BAT للحصول على التيار تركيب جافا القائمة على بقية المقال المخزنة في التسجيل.

وهذا الحل يعتمد على JDK التي يتم تركيبها تحت٪ PROGRAMFILES٪ \ جافا، على سبيل المثال C: \ ملفات البرنامج \ جافا \ jdk1.6.0_18. يمكنك تغيير خط "مجموعة JDK_Version = 1.6" إلى الإصدار الذي تريد استخدامه مثل "مجموعة JDK_Version = 1.5".

وعلى افتراض أن أحدث نسخة من JDK سيكون في أسفل القائمة (جدك٪ jdk_Version٪ *) يجب تعيين أحدث إصدار متوفر كجاوة. وإذا لم يتم العثور على JDK لن يتغير JAVA_HOME. وإذا لم يتم العثور على جدك وJAVA_HOME لم يكن لديك قيمة النصي سيتم عرض رسالة خطأ.

@echo off
rem set the version of jdk you would like to use (1.4, 1.5, 1.6, etc)
set JDK_Version=1.6

echo.
echo Locating JDK %JDK_Version%

for /d %%i in ("%ProgramFiles%\Java\jdk%jdk_Version%*") do (set Located=%%i)
rem check if JDK was located
if "%Located%"=="" goto else
rem if JDK located display message to user
rem update %JAVA_HOME%
set JAVA_HOME=%Located%
echo     Located JDK %jdk_Version%
echo     JAVA_HOME has been set to:
echo         %JAVA_HOME%
goto endif

:else
rem if JDK was not located
rem if %JAVA_HOME% has been defined then use the existing value
echo     Could not locate JDK %JDK_Version%
if "%JAVA_HOME%"=="" goto NoExistingJavaHome
echo     Existing value of JAVA_HOME will be used:
echo         %JAVA_HOME%
goto endif

:NoExistingJavaHome
rem display message to the user that %JAVA_HOME% is not available
echo     No Existing value of JAVA_HOME is available
goto endif

:endif
rem clear the variables used by this script
set JDK_Version=
set Located=

ويمكنك استخدام القيم المخزنة في التسجيل لاكتشاف تلقائيا حيث تم تثبيت جافا وإعداد متغير JAVA_HOME.

HKLM > Software > JavaSoft > Java Runtime Environment

وفي هذا الموقع هو مفتاح يسمى كرنتفرسون. هذا الإصدار يحيل الى واحدة من الدلائل على هذا المستوى بالاسم. فتح الدليل يعرض مفتاح آخر يسمى JavaHome. قيمة JavaHome هو مسار نظام الملفات التي يمكن استخدامها لتحديد البيئة JAVA_HOME المتغير الخاص بك.

وضمن ملف دفعي يمكنك أن تفعل شيئا مثل:

FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B

FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\%CurVer%" /v JavaHome') DO set JAVA_HOME=%%B

إذا كنت ترغب في قراءة أكثر من ذلك، لقد كتبت <لأ href = "http://chriskopec.com/blog/2009/jun/15/automatic-discovery-java_home-batch-file/" يختلط = " noreferrer "> تعليمي واصفا ما هو مطلوب لبناء ملف دفعي لصناعة السيارات في اكتشاف JAVA_HOME.

وبينما لم يكن مثاليا، يمكنك استخدام التالية لاكتشاف مجلد JRE الحالي:

for /d %%i in ("\Program Files\Java\jre*") do set JAVA_HOME=%%i

إذا انها JDK تريد، الاستخدام:

for /d %%i in ("\Program Files\Java\jdk*") do set JAVA_HOME=%%i`

لحل أكثر قوة على أساس التحقق من سجل ويندوز، الاستخدام:

set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
set Cmd=reg query "%KeyName%" /s
for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j

لجدك، ستحتاج هذا الخط بدلا من ذلك:

set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit

إذا لم يتم تعيين JAVA_HOME بالفعل، وكنت ترغب في تعيين ذلك، فإنك ربما تحتاج إلى القيام به شيء من هذا القبيل

dir java.exe /B /S

والتي سوف تعطيك قائمة بجميع الدلائل التي تحتوي على JAVA.EXE الملف. من هناك يمكنك أن أنبوب الإخراج إلى أمر آخر أن يوزع النتائج ويختار واحدة من تلك الدلائل، ثم يستخدم لتعيين متغير JAVA_HOME.

وجاوة المفترض لإعداد متغير JAVA_HOME عند تثبيته. استخدام هذا للعثور على موقع جاوة:

if not "%JAVA_HOME%" == "" goto HasJavaHome

:HasJavaHome
set JAVA_HOME=... // Your new value goes here.

فيما يلي ملف دفعي صغير مفيد يبحث في كل شيء في المسار الخاص بك عن أول ظهور للملف.الجزء السحري الصغير هو %%~dp$PATH:i%%i في حلقة for.سيقوم %%~dp بتوسيع المتغير التالي إلى حرف محرك الأقراص والمسار فقط.يبحث $PATH:i عن المسار لأول ظهور لـ %%i وهو اسم الملف الذي تم تمريره إلى حلقة for.

مثال: أين.بات

@echo off
setlocal

if "%1"=="" goto USAGE
set filename=%1

for %%i in (%filename%) do @echo %%~dp$PATH:i%%i

goto EOF

:USAGE

echo %0 filename

:EOF
endlocal

وهذا لا يتم البحث القرص الصلب بأكمله. فإنه يبحث فقط شجرة الدليل الأصل وذلك بشكل أسرع بكثير من استخدام "دير JAVA.EXE / B / S".

@ECHO off
ECHO ------------------------------------------------------------------
ECHO  Define the location of an existing JDK install by 
ECHO  searching for Javasoft JDK distrobution in parent 
ECHO  directories.
ECHO.
ECHO  Script does not add trailing slash.
ECHO ------------------------------------------------------------------
IF DEFINED JAVA_HOME (
  ECHO JAVA_HOME is already set.
  GOTO :JHSET
)
SET matchobject=Javasoft\bin\java.exe
SET "dir=%~f0"
:LOOP
CALL :FGETDIR "%dir%"
IF EXIST "%dir%\%matchobject%" (
  ECHO Found JAVA_HOME at %dir%\
  GOTO :HOMESET
)
IF "%dir:~-1%" == ":" (
  ECHO Reached root and directory containing "%matchobject%" not found.
  GOTO :EOF
)
GOTO :LOOP
:HOMESET
SET JAVA_HOME=%dir%
GOTO :JHSET
:: function section
:FGETDIR
SET "dir=%~dp1"
SET "dir=%dir:~0,-1%"
EXIT /B 0
:: end function section
:JHSET
:: Does JAVA_HOME have a trailing slash? If so remove it.
IF !JAVA_HOME:~-1!==\ SET JAVA_HOME=!JAVA_HOME:~0,-1!
ECHO JAVA_HOME is %JAVA_HOME%
ECHO Will close in a few seconds...
ping -n 60 127.0.0.1>nul
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top