feindflug
Goto Top

Variablen in Batch vergleichen

Hallo,

ich bin gerade an Grübeln waran es liegen könnte das ein Vergleich zweier Variablen nicht funktioniert.

@echo off
setlocal enableextensions enabledelayedexpansion
color 0A
REM aus diesem Forum hier, ermittelt freien Speicherplatz auf Laufwerk d in GB
for /f "tokens=3" %%i in ('dir d: /-c^|findstr /c:"Bytes frei"') do set "Frei=%%i"
set GB=%Frei:~,-9%
REM zu Testzwecken Ausgabe des Wertes = 172
echo %GB%
REM Vergleich der beiden Werte Falls Variable GB kleiner als 25 ist soll SIe zu Error springen, anderenfalls zu mache weiter
if "%GB%" LSS "25" goto error

:error
echo Wert ist kleiner als 25
exit

:mache weiter
echo Wert ist größer als 25

Fehler: Sprung immer zu error

Vielen Dank für Eure Hilfe.

Content-ID: 105932

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

Ausgedruckt am: 08.11.2024 um 19:11 Uhr

bastla
bastla 13.01.2009 um 18:04:47 Uhr
Goto Top
Hallo feindflug und willkommen im Forum!

Da Du Zahlenwerte (und nicht Text) vergleichen willst, musst Du die zu vergleichenden Werte auch als Zahl (und daher ohne Anführungszeichen) angeben.

Hinzu kommt, dass ":error" auf jeden Fall erreicht wird (per Sprung oder weil es ohnedies die nächste Batchzeile ist) - insofern wäre etwa
if %GB% GEQ 25 goto :mache weiter
angebracht.

Grüße
bastla
Biber
Biber 13.01.2009 um 18:11:46 Uhr
Goto Top
Moin feindflug,

willkommen im Forum.
Wenn Du Zahlenwerte vergleichen willst, dann darfst Du keine Anführungszeichen verwenden.
Ohne Anführungszeichen wird die erste/die linke Variable im Vergleich als "Zahl" angenommen, wenn sie mit einer Ziffer beginnt.
So einfach ist die M$-Welt gestrickt.

Außerdem wird die Sprungmarke ":error" auch ohne Sprung immer erreicht.
Also ändere die Zeile sinngemäß:
if  %GB% GEQ  25 goto :weiterAllesPrima

::error
REM { bla }
...
goto :ende
::
:weiterAllesPrima
REM { bla }

Grüße
Biber


[Edit] Okay, gegenstandslos.... wieder mal zweiter... *winkzz @bastla [/Edit]
tim1986
tim1986 13.01.2009 um 20:25:24 Uhr
Goto Top
LOL Bieber VS bastla = ) was für ein wettlauf
GhostScripter
GhostScripter 14.01.2009 um 11:13:43 Uhr
Goto Top
lustig, wenn man es gefunden hat

selbst wenn die if Bedingung nicht zutrifft, geht die Abarbeitung bei der Sprungmarke :error weiter. Es gibt ja keinen Befehl, etwas anderes zu tun. Du solltest also vor dem :error ein goto weiter einfügen. Ob Sprungmarken mit Leerzeichen erlaubt sing, weiss ich nicht, ich lass es lieber. Wenn Du nun die Zahlen noch als Zahlen behandelst (mit set /a und ohne Anführungszeichen in der IF Abfrage) , bist Du auch da auf der sicheren Seite. Und der exit Befehl im Error Unterprogramm ist auch nicht so toll, nim lieber einen Sprung an das Ende der Batch.

@echo off
setlocal enableextensions enabledelayedexpansion
color 0A 
REM aus diesem Forum hier, ermittelt freien Speicherplatz auf Laufwerk d in GB
for /f "tokens=3" %%i in ('dir d: /-c^|findstr /c:"Bytes frei"') do set "Frei=%%i"   
set /A GB=%Frei:~,-9%
REM zu Testzwecken Ausgabe des Wertes = 172
echo %GB% 
REM Vergleich der beiden Werte Falls Variable GB kleiner als 25 ist soll SIe zu Error springen, anderenfalls zu mache weiter
if %GB% LSS 25 goto error

goto weiter
:error
echo Wert ist kleiner als 25
goto :EOF

:weiter
echo Wert ist größer als 25

exit
GS