1

Из реестра Windows я могу получить список версий Java, которые установлены в моей системе, используя следующий код. Но как пройтись по списку и сохранить дом Java в массиве?

@ECHO OFF
REG QUERY "HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit" /S
PAUSE

Вывести следующим образом:

output
-----------
D:\ITM\configuration 
experience\apm_datacollectors_win_8.1.4.0\j2se_datacollecto
r_win_8.1.4.0\j2sedc\.gdc\7.3.0.5.0\bin>config.bat

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit
CurrentVersion    REG_SZ    1.8

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.7
JavaHome    REG_SZ    C:\Program Files\jdk1.7.0_79
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.7.0_79
JavaHome    REG_SZ    C:\Program Files\jdk1.7.0_79
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8
JavaHome    REG_SZ    C:\Program Files\Java\jdk1.8.0_121
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8.0_121
JavaHome    REG_SZ    C:\Program Files\Java\jdk1.8.0_121
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8.0_121\MSI
INSTALLDIR    REG_SZ    C:\Program Files\Java\jdk1.8.0_121\
NOSTARTMENU    REG_SZ    0

Press any key to continue . . .

2 ответа2

1

В MS-DOS нет такого понятия, как массив, но вы можете просмотреть результаты и получить значения для JavaHome следующим образом:

for /f "tokens=3* usebackq" %%a in (`reg query "HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit" /S ^| find "JavaHome"`) do (
    echo %%a %%b
)
0

Прежде всего, спасибо за ответ и за то, что я (разработчик Java) осознаю, что массивы не поддерживаются в пакетном скрипте :-)

Чего я хочу достичь? -> Я работаю над агентом мониторинга, который в настоящее время предоставляется клиентам в виде zip-файла. Клиент распаковывает его и запускает файл config.bat для настройки агента на своем компьютере. Этот config.bat просит пользователя ввести JAVA_HOME (каталог, в котором установлена java на клиентском компьютере), поскольку агент основан на java. Моя задача - повысить качество обслуживания клиентов, автоматически выполняя поиск любых java-программ, установленных на его компьютере, и не просить клиентов вводить JAVA_HOME.

Теперь один из вариантов использования - на компьютере клиента установлена только версия Java. Затем скрипт config.bat должен прочитать эту запись Java из реестра Windows. Но что, если на клиентском компьютере установлено несколько экземпляров Java? В таком случае мне придется показать клиенту, что у него на компьютере несколько экземпляров java, и он может выбрать один из них для установки агента.

@Berend: Спасибо, цикл for, которым вы поделились выше, работает нормально и возвращает результат, как показано ниже. В том, что для цикла %% a переменная, которая хранит значение после итерации? Правильно ли мое понимание, и что такое %% b?

D:\ITM\configuration 
experience\apm_datacollectors_win_8.1.4.0\j2se_datacollecto
r_win_8.1.4.0\j2sedc\.gdc\7.3.0.5.0\bin>config.bat
C:\Program Files\jdk1.7.0_79
C:\Program Files\jdk1.7.0_79
C:\Program Files\Java\jdk1.8.0_121
C:\Program Files\Java\jdk1.8.0_121

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .