я написал простой пакет для установки Java
for /f "tokens=3" %%c in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /v Java7FamilyVersion') do set java_version=%%c
if %java_version%==1.7.0_55 (goto end) else (goto install)
:end
exit
:install
msiexec.exe /I "%~DP0jre1.7.0_55.msi" /q /norestart /L "%windir%\log\Oracle_SUN_JAVA7_SE_Up55_DE_x86_0253_Install.log"
Я хотел бы проверить, установлена ли версия, которую я хочу установить, если она должна быть пропущена. Когда Java не устанавливается вообще, конечно, раздел реестра отсутствует, и я получаю сообщение об ошибке.
Может кто-нибудь помочь мне с этой проблемой?
Добавлены цитаты для сравнения строк, значение по умолчанию для java_version, ошибка catch и упрощенная инструкция if. Попробуй это.
set "java_version=0"
for /f "tokens=3" %%C in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /v Java7FamilyVersion 2^>nul') do set "java_version=%%C"
if not "%java_version%"=="1.7.0_55" goto install
exit
:install
msiexec.exe /I "%~DP0jre1.7.0_55.msi" /q /norestart /L "%windir%\log\Oracle_SUN_JAVA7_SE_Up55_DE_x86_0253_Install.log"
2>nul
отправляет поток stderr (2) в поток nul.