Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch If-Anweisung kleiner oder gleich mit negative Zahlen

Frage Entwicklung Batch & Shell

Mitglied: moiko89

moiko89 (Level 1) - Jetzt verbinden

16.05.2012 um 14:30 Uhr, 8014 Aufrufe, 6 Kommentare

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:

01.
set /a zahl1=10 
02.
set /a zahl2 =20 
03.
set /a ergebnis=%zahl2%-%zahl1% 
04.
 
05.
if "%ergebnis%" LEQ "0" goto minus 
06.
:minus 
07.
echo Das Ergebnis ist 0 oder kleiner als 0.
Mitglied: bastla
16.05.2012 um 15:04 Uhr
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 ) ...

Grüße
bastla
Bitte warten ..
Mitglied: mak-xxl
16.05.2012 um 15:10 Uhr
Moin moiko89,

besser (für alle 3 Fälle) so, beachte dabei Zuweisung, Berechnung, Vergleich und GOTO):
01.
@echo off 
02.
set /a "zahl1=10" 
03.
set /a "zahl2=20" 
04.
set /a "ergebnis=%zahl1%-%zahl2%" 
05.
 
06.
if %ergebnis% GTR 0 goto :plus 
07.
if %ergebnis% EQU 0 goto :gleich 
08.
if %ergebnis% LSS 0 goto :minus 
09.
 
10.
:plus 
11.
echo Das Ergebnis ist groesser als 0. 
12.
goto :eof 
13.
 
14.
:gleich 
15.
echo Das Ergebnis ist gleich 0. 
16.
goto :eof 
17.
 
18.
:minus 
19.
echo Das Ergebnis ist kleiner als 0. 
20.
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
Bitte warten ..
Mitglied: moiko89
18.05.2012 um 07:49 Uhr
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
Bitte warten ..
Mitglied: bastla
18.05.2012 um 09:34 Uhr
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
Bitte warten ..
Mitglied: moiko89
18.05.2012 um 13:01 Uhr
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:

01.
@echo off 
02.
set /p zahl1=zahl1: 
03.
set /p zahl2=zahl2: 
04.
set /a ergebnis=%zahl1%-%zahl2% 
05.
echo %ergebnis% 
06.
 
07.
if %ergebnis% LEQ 0 ( 
08.
goto kleinerals) 
09.
 
10.
:grosserals 
11.
echo Das Ergebnis ist groesser als Null. 
12.
pause 
13.
 
14.
:kleinerals 
15.
echo Das Ergebnis ist kleiner als Null. 
16.
pause 
17.
 

Schöne Grüße moiko89
Bitte warten ..
Mitglied: bastla
18.05.2012 um 14:18 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Batch & Shell
gelöst Per Batch Datei die Zahl jede Zell in einer Spalte um 10 verkleinern (12)

Frage von ha5257 zum Thema Batch & Shell ...

Batch & Shell
Warum greift meine if-Abfrage nicht? (1)

Frage von jan999 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell IF Abfrage Vergleichsoperatoren (4)

Frage von Peterz zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

DSL, VDSL
gelöst PfSense 2.4.1 an Telekom Entertain 50MBit VDSL BNG, IPTV funktioniert nicht (9)

Frage von stefanxx zum Thema DSL, VDSL ...