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:
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 185090
Url: https://administrator.de/contentid/185090
Ausgedruckt am: 25.11.2024 um 01:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo moiko89 und willkommen im Forum!
Es passiert nach dem "
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 ) ...
Grüße
bastla
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 ) ...
Grüße
bastla
Moin moiko89,
besser (für alle 3 Fälle) so, beachte dabei Zuweisung, Berechnung, Vergleich und GOTO):
Und neben den Unzulänglichkeiten: Wenn Du
[Edit]Wie immer zu langsam ...[/Edit]
Einen angenehmen Feiertag wünscht mit freundlichen Grüßen von der Insel - Mario
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
Hallo moiko89!
Grüße
bastla
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