Batch para obtener dato de una clave de registro

Escribo nuevamente para consultar algo que seguramente me van a ayudar.

Necesitaría poder obtener el valor de una clave, por ej

reg query "HKLM \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ KLiteCodecPack_is1" /v "DisplayVersion"

Me da como resultado

DisplayVersion REG_SZ 15.8.5

lo que necesito es obtener solamente el "15.8.5" para que por ejemplo pueda usarlo en algo como:

IF "%valor%" LSS goto INSTALL
:INSTALL
Echo Instalando K-Lite
"C:\updates\K-Lite Codec Pack.exe" /verysilent

2 respuestas

Respuesta
1
for /F "tokens=3" %%I IN ('"HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\KLiteCodecPack_is1" /v "DisplayVersion"') do echo %%I

Sí, al hacer copy-paste me olvidé el comando.

Pero claro, la comparación no le funcionará en algunos casos porque no detectará que 15.10.1 es más reciente que 15.8.5, por ejemplo. Así que tendrá que comparar de forma independiente la versión mayor. Menor. Parche; algo como esto (le dejo el resto a él).

@echo off
:: Check installed version
for /F "tokens=3" %%I in ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\KLiteCodecPack_is1" /v "DisplayVersion"') do set valor=%%I
:: If error, then not installed, then install
if [%valor%]==[] goto INSTALL
:: Compare version
for /F "delims=. tokens=1,2,3" %%I in ("%valor%") do (
  Echo %%I
 echo %%J
 echo %%K
)
Respuesta
1

Creo que a la respuesta de RICOHABLADOR le falta incluir el "reg query" en el comando del FOR. Si tengo razón quedaría así:

for /F "tokens=3" %%I IN ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\KLiteCodecPack_is1" /v "DisplayVersion"') do echo %%I

De todas formas creo que luego quieres hacer una comparación con ese valor pero no es una comparación numérica de modo que tal vez no resulte como esperas. Incorporando esta segunda parte  sería algo como:

@echo off
for /F "tokens=3" %%I IN ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\KLiteCodecPack_is1" /v "DisplayVersion"') do set valor=%%I
echo %valor%
if %valor% lss 15.8.5 goto :install
goto :eof
:Install
Echo Instalando K-Lite
"C:\updates\K-Lite Codec Pack.exe" /verysilent

Doy por supuesto que el comando de instalación es el que indicabas (no tengo ni idea de K-Lite) y que la comparación es, precisamente con el valor 15.8.5

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas