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-Key: 185090

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

Printed on: April 19, 2024 at 01:04 o'clock

Member: bastla
bastla May 16, 2012 at 13:04:34 (UTC)
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
Member: mak-xxl
mak-xxl May 16, 2012 at 13:10:30 (UTC)
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
Member: moiko89
moiko89 May 18, 2012 at 05:49:42 (UTC)
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
Member: bastla
bastla May 18, 2012 at 07:34:16 (UTC)
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
Member: moiko89
moiko89 May 18, 2012 at 11:01:07 (UTC)
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
Member: bastla
bastla May 18, 2012 at 12:18:34 (UTC)
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