moiko89
Goto Top

Batch If-Anweisung kleiner oder gleich mit negative Zahlen

Hallo Leute

Ich bin hier gerade auf ein kleines Problem gestoßen für welches ich keine Lösung finde,
und zwar:
habe ich eine kleine Rechnung in einer Batch gebastelt die eigl. immer in den Minusbereich kommt und sobald das passiert
soll eine If-Anweisung einen goto-Befehl auslösen, allerdings rasselt er durch die IF und er macht einfach weiter im Text.
An was kann das denn liegen?
Hier mal ein Codebeispiel:

set /a zahl1=10
set /a zahl2 =20
set /a ergebnis=%zahl2%-%zahl1%

if "%ergebnis%" LEQ "0" goto minus  
:minus
echo Das Ergebnis ist 0 oder kleiner als 0.

Content-ID: 185090

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

Ausgedruckt am: 25.11.2024 um 01:11 Uhr

bastla
bastla 16.05.2012 um 15:04:34 Uhr
Goto Top
Hallo moiko89 und willkommen im Forum!

Es passiert nach dem "if" ja nix, was verhindern würde, dass die Zeile 7 erreicht wird - zB ein "goto :eof" unmittelbar nach Zeile 5 würde das ändern ...

Außerdem führst Du keinen zahlenmäßigen, sondern einen Textvergleich durch (zumindest solange es noch die Anführungszeichen in Zeile 5 gibt) - das wäre allerdings nur relevant, wenn Du zB "15" mit "3" vergleichen würdest (richtig ist's aber trotzdem nicht face-wink) ...

Grüße
bastla
mak-xxl
mak-xxl 16.05.2012 um 15:10:30 Uhr
Goto Top
Moin moiko89,

besser (für alle 3 Fälle) so, beachte dabei Zuweisung, Berechnung, Vergleich und GOTO):
@echo off
set /a "zahl1=10"  
set /a "zahl2=20"  
set /a "ergebnis=%zahl1%-%zahl2%"  

if %ergebnis% GTR 0 goto :plus
if %ergebnis% EQU 0 goto :gleich
if %ergebnis% LSS 0 goto :minus

:plus
echo Das Ergebnis ist groesser als 0.
goto :eof

:gleich
echo Das Ergebnis ist gleich 0.
goto :eof

:minus
echo Das Ergebnis ist kleiner als 0.
goto :eof

Und neben den Unzulänglichkeiten: Wenn Du
set /a ergebnis=%zahl2%-%zahl1%
- also 20-10 rechnest, wird nix negativ ...

[Edit]Wie immer zu langsam ...[/Edit]

Einen angenehmen Feiertag wünscht mit freundlichen Grüßen von der Insel - Mario
moiko89
moiko89 18.05.2012 um 07:49:42 Uhr
Goto Top
Hey vielen Dank für die Antworten.
Hatte die Konvertierung in Text total übersehen, also es lag im Endeffekt an die ""

Schöne Grüße
bastla
bastla 18.05.2012 um 09:34:16 Uhr
Goto Top
Hallo moiko89!
also es lag im Endeffekt an die ""
Nicht wirklich (die Konvertierung kann sich aber unter anderen Umständen natürlich auch auswirken) - wenn Du nochmals Deinen oben geposteten Code betrachtest wirst Du sehen, dass ganz unabhängig vom Ergebnis der Abfrage in Zeile 5 die Zeile 6 immer erreicht wird (entweder, weil tatsächlich ein Sprung zu ":minus" erfolgt, oder, weil ohne Sprung einfach die Zeile 6 im Ablauf folgt) - daher entweder, wie von Mario gezeigt, alle Möglichkeiten abtesten und entsprechend verzweigen, oder gleich nach der Zeile 5 das tun, was im Fall "größer Null" erforderlich ist und vor dem Label ":minus" einen Sprung zu einem weiteren Teil des Batches einbauen oder per "goto :eof" den Batch beenden ...

Grüße
bastla
moiko89
moiko89 18.05.2012 um 13:01:07 Uhr
Goto Top
Hm ja okay, jetzt wo ich es nochmal nachgetestet habe muss ich euch recht geben.

Ich hab das jetzt so gelöst und es scheint zu funktionieren:

@echo off
set /p zahl1=zahl1:
set /p zahl2=zahl2:
set /a ergebnis=%zahl1%-%zahl2%
echo %ergebnis%

if %ergebnis% LEQ 0 (
goto kleinerals)

:grosserals
echo Das Ergebnis ist groesser als Null.
pause

:kleinerals
echo Das Ergebnis ist kleiner als Null.
pause


Schöne Grüße moiko89
bastla
bastla 18.05.2012 um 14:18:34 Uhr
Goto Top
Hallo moiko89!

Jetzt wird aber für positive Werte nach der Pause in Zeile 12 immer noch der Teil ab Zeile 14 zusätzlich ausgeführt ...

Grüße
bastla