Я хочу установить переменную JAVA_HOME из командного сценарияОткройте из пакетного файла, где установлена Java?
ответ
Этот фрагмент кода будет искать пути тока для 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%
)
system32 не там, где будет установлена JRE. См. Http://mindprod.com/jgloss/registry.html#JAVAFIND JAVA_HOME обычно используется в сценариях этой формы для запуска приложений:% JAVA_HOME% \ bin \ java – McDowell
Я не говорю, что это так, но вот где это происходит жить на моем пути. Из другого ответа (или комментариев к другому ответу, я не знаю, он был удален) вы можете * установить установщик, который копирует java.exe в каталог% systemroot% \ system32. В моей системе, по-видимому, есть. –
Мое решение найдет, где java.exe находится на * вашем * пути, если вообще. –
Предполагается, что Java должна настроить переменную JAVA_HOME при ее установке. Используйте это, чтобы найти расположение Java:
if not "%JAVA_HOME%" == "" goto HasJavaHome
:HasJavaHome
set JAVA_HOME=... // Your new value goes here.
Я хочу «открыть», где находится Java. – flybywire
Java никогда не устанавливал переменную JAVA_HOME при установке. Это соглашение, используемое для того, чтобы позволить сценаристу разрешить системному пользователю указывать конкретную версию Java для использования при запуске приложения, поскольку может быть установлена более одной версии. – McDowell
Если JAVA_HOME еще не установлен, и вы хотите, чтобы установить его, то вы, вероятно, нужно сделать что-то вроде
dir java.exe /B /S
который даст вам список всех каталогов, содержащих файл java.exe. Оттуда вы можете передать этот вывод другой команде, которая анализирует результаты и выбирает один из этих каталогов, а затем использует ее для установки переменной JAVA_HOME.
Это будет работать только из каталога, в котором установлена java, или из любого его суперкаталога. Это не сработает, например, при запуске из C: \, в то время как java установлен где-то на D: \ – eleven81
См. Get the current Java version from a BAT file, чтобы получить текущую установку Java на основе информации, хранящейся в реестре.
Пока не совершенен, вы можете использовать следующие чтобы открыть текущую папку 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
Вот небольшой небольшой пакетный файл, который будет искать все в вашем пути для первого появления файла. Магический маленький бит - это %% ~ 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
Вы можете использовать значение, хранящееся в реестре для автоматического обнаружения, где установлен и настройка 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
Если вы хотите узнать больше, я написал tutorial описание того, что требуется для создания пакетного файла для автоматического обнаружения JAVA_HOME.
Это решение зависит от того, установлен ли JDK в% ProgramFiles% \ Java, например C: \ Program Files \ Java \ jdk1.6.0_18. Вы можете изменить строку «установить JDK_Version = 1.6» на версию, которую вы хотите использовать, например «set 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=
Это не поиск всего жесткого диска. Он ищет только родительское дерево каталогов и, следовательно, намного быстрее, чем использование «dir 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
- 1. Откройте URL-адрес без использования браузера из пакетного файла
- 2. Откройте «Сетевые подключения» в проводнике из пакетного файла?
- 3. Как приостановить заставку Java из пакетного файла?
- 4. Запуск Java -jar команда из пакетного файла
- 5. Запуск Java Packaged Program из пакетного файла
- 6. Выполнение Скомпилированных классов Java из пакетного файла
- 7. Вызов пакетного файла Java-программа
- 8. Создание пакетного файла из файла оболочки
- 9. Редактирование записи реестра и откройте реестр с помощью пакетного файла
- 10. Lauching приложения Java из пакетного файла с правильным JRE
- 11. Java командной строки пакетного файла
- 12. Откройте Android Signing Wizard из командного файла
- 13. Eclipse версия Java некорректно установлена где-то
- 14. Создание пакетного файла для записи пакетного файла
- 15. вызов пакетного файла из CMakeLists.txt
- 16. Запуск телнет из пакетного файла
- 17. Установить errorlevel из пакетного файла
- 18. Запустить .jar из пакетного файла
- 19. Получение клавиши из пакетного файла
- 20. Запуск .VBS из пакетного файла
- 21. IP-конфигурация из пакетного файла
- 22. Как проверить установку Java из пакетного сценария?
- 23. Проблема выполнения пакетного файла в приложении Java
- 24. Проблемы созданием текстового файла из пакетного файла
- 25. Как читать свойства файла из пакетного файла
- 26. Восстановление .bak файла из пакетного файла
- 27. Изменение командного файла из другого пакетного файла
- 28. Невозможно найти, где установлена моя установка java
- 29. Как поймать ошибки пакетного файла в java
- 30. приостановление пакетного файла в ожидании завершения java
Ваше название и ваш вопрос противоположны. Что это, получить или установить? –