2016-07-21 4 views
0

Имея проблему, из-за которой я не могу заставить работать следующий скрипт. В принципе, как итог мне нужно убедиться версия приложения больше, чем 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, так почему это до сих пор erroring вне дома?

Надеется, что это имеет смысл

Благодаря

Микоян

+1

'2.0.0.8' не является десятичным ... – npocmaka

+0

Связано: [Как отсортировать строки текстового файла, содержащие номера версий в формате major.m inor.build.revision numerical?] (http://stackoverflow.com/a/34418090) – aschipfl

ответ

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) 
+2

Я боюсь, что это работает только в том случае, если соответствующие числовые части имеют одинаковое количество цифр ... – aschipfl

+1

Спасибо вам всем за руководство мне по правильному пути, удалось решить эту проблему со всей вашей помощью и огромное спасибо npocmaka! – Mikoyan

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) 
Смежные вопросы