Batch – 2 Versionsnummern vergleichen

Ich musste heute via Batch 2 Firefox Versionsnummern vergleichen und die kleinere Version erkennen. Ist auf den ersten Moment nicht so einfach wie es klingt aber machbar.
Die Versionsnummern bei Firefox bestehen aus maximal 3 Zahlen (seit Version 3), getrennt durch 2 Punkte; ggf. weniger.
Firefox 3.6.28
Firefox 15.0

Ein direkter Vergleich mit Batch ist aufgrund der Punkte nicht möglich; einfach nur die Punkte entfernen würde aber false positives ermöglichen:
3.6.28 = 3628
15.0 = 150
3.6.28 >(!) 15.0

Meine Lösung ist nicht sonderlich schön aber sie funktioniert:

@echo off
setlocal

set alt=9.6.28
set neu=10.0

for /f "tokens=1,2,3 delims=. " %%a in ("%alt%") do set alt1=%%a&set alt2=%%b&set alt3=%%c
for /f "tokens=1,2,3 delims=. " %%a in ("%neu%") do set neu1=%%a&set neu2=%%b&set neu3=%%c

set /a encalt=alt1*1000000+alt2*1000+alt3
set /a encneu=neu1*1000000+neu2*1000+neu3

echo %encalt%
echo %encneu%

echo %encalt% kleiner als %encneu% ?
if %encalt% LSS %encneu% echo JA

endlocal

Es werden Versionsnummern mit bis zu 3 Zahlen verarbeitet; weniger Zahlen geht immer, für mehr Zahlen einfach nur den for Befehl erweitern. Für jede Version wird ein numerischer Wert errechnet und dieser dann verglichen.

Hier ein Test, bei dem ich erst 9.6.28 mit 10.0 vergleiche und dann 9.999.999 mit 10.0. In beiden Fällen wir korrekt ausgegeben, dass 10.0 größer ist. Für größere Versionsnummer in den einzelnen Parts die Multiplikation anpassen.

Fragen, Anregungen, Erweiterungen; Kommentare sind willkommen 🙂

Schreibe einen Kommentar