Невозможно сравнить десятичное число через пакет

Возникла проблема, из-за которой я не могу заставить работать следующий скрипт. По сути, в качестве резюме мне нужно убедиться, что версия приложения выше 2.0.0.8.

Итак, вот мой код:

setlocal enabledelayedexpansion
set n2=2.0.0.8
FOR /F "tokens=2* delims=0   " %%A IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
\FB58E75BC1D58DF60340894DB00D3FA9BBD513B6" /v displayversion') DO SET n1=%%B 
IF %n1% GEQ %n2% (goto success) else (goto error)

:success
start notepad.exe
Goto:eof

:error
start winword.exe
Goto:eof

:eof
exit

Вывод работает нормально, и n1 выводит версию выше 2.0.0.8 (выводит 2.0.0.12), используя блокнот и запуск winword исключительно для тестирования.

Независимо от того, что он всегда выдает ошибку и открывает Winword.exe

Значение в тестировании равно 2.0.0.12, так почему это все еще выдает ошибку?

Надеюсь, это имеет смысл

Спасибо

Микоян


person Mikoyan    schedule 21.07.2016    source источник
comment
2.0.0.8 не является десятичным...   -  person npocmaka    schedule 21.07.2016


Ответы (1)


Попробуйте удалить точки, чтобы вы сравнивали их как десятичные дроби:

setlocal enabledelayedexpansion
set n2=2.0.0.8
FOR /F "tokens=2* delims=0   " %%A IN (
    'REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\FB58E75BC1D58DF60340894DB00D3FA9BBD513B6" /v displayversion'
) DO SET n1=%%B 

for /f "tokens=1,2,3,4 delims=." %%a in ("%n2%") do set "v2=%%a%%b%%c%%d"
for /f "tokens=1,2,3,4 delims=." %%a in ("%n1%") do set "v1=%%a%%b%%c%%d"

IF %v1% GEQ %v2% (goto success) else (goto error)
person npocmaka    schedule 21.07.2016
comment
Боюсь, это работает только в том случае, если соответствующие числовые части имеют одинаковое количество цифр... - person aschipfl; 21.07.2016
comment
Спасибо вам всем за то, что направили меня на правильный путь, мне удалось решить эту проблему со всей вашей помощью, и большое спасибо npocmaka! - person Mikoyan; 21.07.2016