130834
Goto Top

(Batch) Nummern vergleichen

ich weiss, dummes Problem, aber Ich finde nichts auf Google.

Also ich habe eine FOR schleife die bei jedem Durchgang eine variable um 1 erhöht.
Damit ich eine 4 Charakter lange Nummer ( 0000 ) in einen Namen einbauen kann, die sonst von der /a option entfernt werden habe ich einen Algorithmus entwickelt der abgleicht in welchem bereich von 1-9999 sich die Zahl befindet. ich vergleiche das hiermit

if "0!var!" LSS "10" ( set "Number=!Number:~0,-1!!var!" & exit /b )  
if "!var!" GEQ "10" ( if "0!var!" LSS "100" set "Number=!Number:~0,-2!!var!" & exit /b )  
if "!var!" GEQ "100" ( if "0!var!" LSS "1000" set "Number=!Number:~0,-3!!var!" & exit /b )  
if "!var!" GEQ "1000" set "Number=!var!" & exit /b  
if "!var!"=="9999" ( goto greatE )  

Aber ich kriege es nicht gebacken, das ich daraus sortierte zahlen herausbekomme da aus irgendeinem grund If "2" LSS "10" ( echo true ) immer mit true endet, da nichts mit 1 und 2 mit 0 verglichen wird,
also " 2" mit "10" was in " " grösser als "1" und "2" grösser als "0" endet, und mit eine Falsche angabe gibt. Wenn jemand einen einfacheren Weg hat, das umzusetzen nur her damit :D

kann mir da jemand helfen? wäre sehr nett, danke!
~clragon

Content-Key: 315250

Url: https://administrator.de/contentid/315250

Printed on: April 24, 2024 at 18:04 o'clock

Mitglied: 129813
Solution 129813 Sep 14, 2016 updated at 20:12:02 (UTC)
Goto Top
Hi again.
Don't enclose the numbers with quotation marks "" this will force a string instead of a number comparison !!

And the == comparison operator always results in a string comparison. Use EQU instead.

See "Test Numeric values" in the following link:
http://ss64.com/nt/if.html

Regards
Mitglied: 130834
130834 Sep 14, 2016 at 20:16:45 (UTC)
Goto Top
thanks, perfect, that was it!
Mitglied: 77559
77559 Sep 14, 2016 at 21:31:50 (UTC)
Goto Top
Das Problem läßt sich doch auch eleganter lösen.
Wenn die Zählvariable immer mehr Stellen hat kann man doch
zur Not eine "normalisierte" Zahl mitführen, Set /A
kann in einem Befehl mehrere Berechnungen drchführen

@echo off & setlocal EnableExtensions EnableDelayedExpansion
Set X=10000
For /L %%A in (95,6,200) Do (
  Set /A X+=%%A, Y=X-10000
  Set /P ="X=!X:~-4! , Y=!Y!   " <NUL  
  if !Y! gtr 1000 (
    Echo X Groesser 1000
  ) else (
    Echo  X kleiner gleich 1000
  )
)

23:21:45 C:\Test\2016-09\14______________________________
> Zahlstellen.cmd
X=0095 , Y=95    X kleiner gleich 1000
X=0196 , Y=196    X kleiner gleich 1000
X=0303 , Y=303    X kleiner gleich 1000
X=0416 , Y=416    X kleiner gleich 1000
X=0535 , Y=535    X kleiner gleich 1000
X=0660 , Y=660    X kleiner gleich 1000
X=0791 , Y=791    X kleiner gleich 1000
X=0928 , Y=928    X kleiner gleich 1000
X=1071 , Y=1071   X Groesser 1000
X=1220 , Y=1220   X Groesser 1000
X=1375 , Y=1375   X Groesser 1000
X=1536 , Y=1536   X Groesser 1000
X=1703 , Y=1703   X Groesser 1000
X=1876 , Y=1876   X Groesser 1000
X=2055 , Y=2055   X Groesser 1000
X=2240 , Y=2240   X Groesser 1000
X=2431 , Y=2431   X Groesser 1000
X=2628 , Y=2628   X Groesser 1000

Gruß
LotPings