Узнайте от пакетного файла, где Java установлен?

Довольно досадный обходной путь: сейчас используйте Xcode 10.1 для развертывания на симуляторах 9.x. Это единственный способ, которым я смог обойти это.

12
задан flybywire 12 March 2009 в 11:57
поделиться

8 ответов

Этот отрывок будет искать текущий ПУТЬ 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%
)
10
ответ дан 2 December 2019 в 04:53
поделиться

Посмотрите Заставляют текущую версию Java от Bat-файла получать текущую установку Java на основе infos, сохраненного в реестре.

7
ответ дан 2 December 2019 в 04:53
поделиться

Это решение зависит от JDK, установленного в папке% ProgramFiles% \ Java, например C: \ Program Files \ Java \ jdk1.6.0_18. Вы можете изменить строку «установить JDK_Version = 1.6» на версию, которую хотите использовать, например «установить JDK_Version = 1.5».

Предполагая, что последняя версия JDK находится в конце списка (jdk% jdk_Version% *), последняя доступная версия должна быть установлена ​​как JAVA_HOME. Если JDK не может быть найден, JAVA_HOME не будет изменен. Если JDK не может быть найден и 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=
6
ответ дан 2 December 2019 в 04:53
поделиться

Java предположил для установки переменной JAVA_HOME, когда это установлено. Используйте это для нахождения местоположения Java:

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

:HasJavaHome
set JAVA_HOME=... // Your new value goes here.
0
ответ дан 2 December 2019 в 04:53
поделиться

Если JAVA_HOME уже не установлен, и Вы хотите установить его, то, вероятно, необходимо сделать что-то как

dir java.exe /B /S

который даст Вам список всех каталогов, содержащих файл java.exe. Оттуда можно передать тот вывод по каналу к другой команде, которая анализирует результаты и выбирает один из тех каталогов, затем использует его для установки переменной JAVA_HOME.

1
ответ дан 2 December 2019 в 04:53
поделиться

Хотя это и не идеально, для обнаружения текущей папки 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`

Для более надежного решения, основанного на проверке Реестр Windows, используйте:

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

Для JDK вам понадобится эта строка:

set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
2
ответ дан 2 December 2019 в 04:53
поделиться

Вот небольшой удобный командный файл, который будет искать все на вашем пути в поисках первого появления файла. Волшебный момент - это %% ~ dp $ PATH: i %% i в цикле for. %% ~ dp расширит следующую переменную только до буквы диска и пути. $ PATH: i ищет путь для первого появления %% i, которое является именем файла, переданным в цикл for.

пример: Where.bat

@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
0
ответ дан 2 December 2019 в 04:53
поделиться

Вы можете использовать значения, хранящиеся в реестре, для автоматического определения места установки Java и настройки переменной JAVA_HOME.

HKLM > Software > JavaSoft > Java Runtime Environment

В этом месте находится ключ с именем CurrentVersion. Эта версия ссылается на один из каталогов на этом уровне по имени. Открытие каталога открывает другой ключ под названием 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

Если вы хотите узнать больше, я написал учебное пособие , описывающее, что необходимо для создания пакетного файла для автоматического обнаружения JAVA_HOME.

5
ответ дан 2 December 2019 в 04:53
поделиться