2016-07-21 6 views
0

Mit einem Problem, bei dem ich nicht scheinen kann, dass das folgende Skript funktioniert. Grundsätzlich als Zusammenfassung brauche ich eine Version einer Anwendung, um sicherzustellen, ist größer als 2.0.0.8Kann die Dezimalzahl nicht über Batch vergleichen

So, hier ist mein Code:

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 

Der Ausgang funktioniert gut und n1 gibt eine Version größer als 2.0.0.8 (es Ausgabe 2.0.0.12) mit Notepad und Winword startet als Test.

Egal, was es immer Fehler und öffnet Winword.exe

Der Wert in der Prüfung ist 2.0.0.12 so, warum dieses erroring noch aus?

Hoffnung macht das Sinn

Dank

Mikojan

+1

'2.0.0.8' ist nicht dezimal ... – npocmaka

+0

Related: [Wie Zeilen einer Textdatei mit Versionsnummern im Format major.m zu sortieren inor.build.revision numerical?] (http://stackoverflow.com/a/34418090) – aschipfl

Antwort

1

Versuchen Sie, die Punkte zu entfernen, damit Sie sie als Dezimalzahlen vergleichen werden:

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

Ich fürchte, das funktioniert nur, wenn die entsprechenden numerischen Teile die gleiche Anzahl an Ziffern haben ... – aschipfl

+1

Danke euch allen für die Regie Ich auf dem richtigen Weg, schaffte es, dies mit all Ihrer Hilfe zu lösen und vielen Dank an 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)