Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
Kommentar vom Moderator Biber am 06.02.2012 um 21:19:29 Uhr
Nach ergebnisloser Nachfrage am 6.2. zwangsgeschlossen und auf "Mehr als genug geholfen" gesetzt.

vielen danke für jede hilfe!
Manche können Duden, andere nur Sieden.
Kommentar vom Moderator Dani am 21.01.2012 um 09:51:03 Uhr
Formatierungshilfen eingefügt.
GELÖST

Batch - einfacher taschenrechner ohne -for-

Frage Entwicklung Batch & Shell

Mitglied: Greaka

Greaka (Level 1) - Jetzt verbinden

21.01.2012, aktualisiert 06.02.2012, 4882 Aufrufe, 20 Kommentare

ich habe versucht, einen taschenrechner mit batchbefehlen zu bauen. in einfachen batchdateien haben diese befehle geklappt. allerdings funktionieren sie nicht in meinem script.
kann mir jemand helfen? ich komme mit for-schleifen in batchdateien nicht klar bzw. habe sie immer noch nicht verstanden.
ich entschuldige mich vorab für meine groß- und kleinschreibung. meine shift-taste funktioniert leider nicht so wie sie soll. deshalb werden shiftzeichen selten kommen da ich diese dann über ascii schreibe.

hier mein script

was habe ich falsch gemacht?
01.
@echo off 
02.
echo Falls eine Fehlermeldung erscheint oder das Fenster sich schliesst, liegt ein 
03.
echo Fehler in der Programmierung vor oder eine eingegebene bzw. errechnete Zahl ist zu hoch/zu niedrig. Ich hafte nicht fuer eventuelle Schaeden. 
04.
echo In diesem Programm werden keinerlei systemgefaehrlichen Befehle angewendet. 
05.
pause 
06.
color 0a 
07.
:start 
08.
cls 
09.
set /p operator=Geben Sie den Operator ein und bestaetigen Sie die Eingabe. (+,-,*,/):  
10.
if %operator%==+ goto zahleingabe 
11.
if %operator%==- goto zahleingabe 
12.
if %operator%==* goto zahleingabe 
13.
if %operator%==/ (goto zahleingabe) else (echo Sie haben ein falsches Zeichen eingegeben. 
14.
pause 
15.
goto start) 
16.
:zahleingabe 
17.
cls 
18.
set /p /a zahle=Geben Sie die erste Zahl ein:  
19.
set /p /a zahlz=Geben Sie die zweite Zahl ein:  
20.
if %operator%==+ goto addition 
21.
if %operator%==- goto subtraktion 
22.
if %operator%==* goto multiplikation 
23.
if %operator%==/ goto division 
24.
:addition 
25.
cls 
26.
set /a sum=0 
27.
set /a sum +=zahle 
28.
set /a sum +=zahlz 
29.
echo Die Summe der beiden Zahlen betraegt %sum%. 
30.
pause 
31.
goto start 
32.
:multiplikation 
33.
cls 
34.
set /a pro=0 
35.
set /a count=0 
36.
goto while 
37.
:whileone 
38.
set /a pro +=zahle 
39.
set /a count +=1 
40.
if not %count%==%zahlz% goto whileone 
41.
echo Das Produkt der beiden Zahlen betraegt %pro%. 
42.
pause 
43.
goto start 
44.
:subtraktion 
45.
cls 
46.
set /a dif=0 
47.
set /a dif +=zahle 
48.
set /a dif -=zahlz 
49.
echo Die Differenz der beiden Zahlen betraegt %dif%. 
50.
pause 
51.
goto start 
52.
:division 
53.
cls 
54.
set /a counter=1 
55.
:whiletwo 
56.
if %zahle%==%zahlz% goto quotient 
57.
set /a zahlz +=zahlz 
58.
set /a counter +=1 
59.
goto whiletwo 
60.
:quotient 
61.
echo Der Quotient der beiden Zahlen betraegt %counter%. 
62.
pause 
63.
goto start
vielen danke für jede hilfe!
Mitglied: icsat
21.01.2012 um 09:56 Uhr
Hallo Greaka,

Zitat von Greaka:
was habe ich falsch gemacht?
  • Du ignorierst die Formatierungshilfe, was es anderen erschwert Dir zu helfen ist.
  • Du Verwendest
    01.
    @echo off
    was es Dir erschwert Fehlerursachen zu erkennen und ggf. hier mitzuteilen. Z.B. hättest Du uns sonst mitteilen können, dass Deine Variablen "zahle" und "zahlz" keinen Inhalt haben.
  • Du Verwendest
    01.
    set /p /a
    , was in imho dazu führt, dass die beiden Variablen keinen Inhalt haben. Warum das so ist müsste Dir einer der Experten hier sicher erklären können. Verwende "/p" und prüfen im Anschluss, ob es sich um eine Zahl handelt.
  • Du Verwendest
    01.
    goto while
    , obwohl while nirgendwo als Sprungmarke definiert ist.
  • Deine Division funktioniert nur, wenn Das Ergebnis 1 oder 2 ohne Rest ist. Warum lasse ich jetz erst mal offen. Da kommst Du schon drauf.

Das sind die Antworten, die mir spontan auf Deine Frage einfallen.

Allerdings gehe ich Davon aus, dass Du diesen Rechner nur zu Übungszwecken in dieser Form erstellt hast, weil eine Berechnung ja auch Einfach über ein
01.
set /a ergebnis = %zahle% %operator% %zahlz%
möglich wäre. Alternativ könnte der Anwender auch einfach die gesamte gewünschte Berechung eingeben
01.
D:\temp>set /p rechenoperation="Eingabe: " 
02.
Eingabe: 2+(4*(1+2)) 
03.
 
04.
D:\temp>set /a ergebnis = %rechenoperation% 
05.
14 
06.
D:\temp>echo %ergebnis% 
07.
14
Zum Abschluss würde ich mir in Deinem Skript beim Prüfen des Operators folgendes wünschen:
  • Verwende in der IF-Abfrage z.B. " um ein Beenden des Skriptes mit Sayntaxfehler bei einer fehlenden Eingabe zu verhindern. z.B.:
    01.
    if "%operator%"=="+" goto zahleingabe
  • Da Du damit dem Anwender allerdings die Chance nimmst aus dem Skript ohne Strg+C nicht wieder aussteigen zu können, wäre es schön bei der Operqatoreingabe eine Möglichkeit zum beenden des Skriptes einzubauen.


Gruß icsAT
Bitte warten ..
Mitglied: Friemler
21.01.2012 um 10:11 Uhr
Hallo Greaka,

zum Thema FOR-Schleife: Schau mal hier vorbei.

Gruß
Friemler
Bitte warten ..
Mitglied: Skyemugen
21.01.2012 um 10:30 Uhr
Zitat von Friemler:
zum Thema FOR-Schleife: Schau mal hier vorbei.

Kaffee, Friemler? Er will doch extra ohne

Zitat von icsat:
was in imho dazu führt, dass die beiden Variablen keinen Inhalt haben.
Warum das so ist müsste Dir einer der Experten hier sicher erklären können. Verwende "/p" und prüfen

Die Antwort liefert dir cmd oder echo on => Syntaxfehler ... eine Eingabe kann nicht als Ausdruck verarbeitet werden, den wahren Grund kennen nur die Redmonder Praktikantinnen rothaarig, natürlich, wenn ich mich an Bibers Worte erinnere
set /a wird i.d.R. nur bei der Berechnung selbst benötigt, Eingaben und Zahlendeklinationen sind also unabhängig davon.
als Beispiel:
set Zahl=1000
aber
set /a Zahl+=1

oder auch
set "Zahl=2+(4*(1+2))"
aber
set /a "Ergebnis=%Zahl%" (um das mal analog zum set /p-Beispiel oben zu zeigen

greetz André
Bitte warten ..
Mitglied: Greaka
21.01.2012 um 11:59 Uhr
erstmal danke für die schnellen antworten...

ich habe mich mit diesem script sehr lange befasst und ja, es ist nur eine reine übungsaufgabe. wenn ich echo on mache und die clsbefehle wegnehme hilft mir das nicht weiter da ich nicht weiß warum der mir -fehlender operand- schreibt.
ich habe diesen thread nicht eröffnet, weil ich hilfe zur selbsthilfe brauche sondern ich gesehen habe dass hier sehr schlaue leute wie bieber sind und mir meine fehler hoffentlich erklären können;)
zum beispiel das in anführungsstriche setzen: ich weiß icht was das bedeutet aber deinem kommentar zu urteilen, ist es wohl eine absicherung gegen das automatische schließen wegen eines fehlers...
zu meiner person: ich bin 15 und möchte später entwickler werden weil mir das lösen von aufgaben durch kombinieren spaß macht, deshalb fange ich erstml gaanz klein bei batch an.
gruß, greaka
Bitte warten ..
Mitglied: bastla
21.01.2012 um 12:48 Uhr
Hallo Greaka und willkommen im Forum!

Als weitere Prüfung noch sinnvoll:
echo %zahle%|findstr "[^0-9]">nul && echo Sie haben ...
Den Text nach dem "echo" kannst Du zu Übungszwecken selbst fortsetzen ...

Ergänzend dazu (um sich auch gegen "08", "009" etc abzusichern):
01.
set "test=" 
02.
set /a test=%zahle% + 0 2>nul 
03.
if not defined test echo ...
Kürzer ginge es auch noch:
set /a %zahle% + 0 2>nul || echo ...
Grüße
bastla

[Edit] %1 auf %zahle% geändert [/Edit]
Bitte warten ..
Mitglied: Lochkartenstanzer
21.01.2012 um 16:13 Uhr
Zitat von Greaka:

ich habe diesen thread nicht eröffnet, weil ich hilfe zur selbsthilfe brauche

zu meiner person: ich bin 15 und möchte später entwickler werden weil mir das lösen von aufgaben durch kombinieren
spaß macht, deshalb fange ich erstml gaanz klein bei batch an.

Wenn Du keine hilfe Selbsthilfe brauchen kannst, bist Du falsch mit dem Berufswunsch Enrtwickler. Selbst in der Fotobranche werden kaum noch Entwickler benötigt, seit jeder auf Digitalfotos umgestiegen ist und Ihren Tintenstrahldrucker benutzt.


lks
Bitte warten ..
Mitglied: Greaka
21.01.2012 um 17:01 Uhr
Ich meine damit, dass ich mir die cmdhilfe und sehr viele Foren bereits angeschaut habe und mich deshalb an das itvolk hier wende...
Bitte warten ..
Mitglied: icsat
21.01.2012 um 17:14 Uhr
Hallo Greaka,

[OT]
Zitat von Greaka:
wenn ich echo on mache und
die clsbefehle wegnehme hilft mir das nicht weiter da ich nicht weiß warum der mir -fehlender operand- schreibt.
Wenn Du Echo nicht anschaltest wirst Du es auch nie lernen!
Nur mit Echo on kannst Du sehen was Dein Skript wann macht um zu verstehen, wo die Probleme sind.
Im ungünstigsten Fall kannst Du sonst noch nicht einmal feststellen, in welcher Stelle/Zeile es in Deinem Skript zu einem Problem kommt.
Und ich bin mir verdammt sicher, dass auch "sehr schlaue leute wie bieber" hin und wieder echo on oder andere Debug Ausgaben verwenden müssen um Fehlern auf die Spur zu kommen, wenn der Interpreter "brain.exe" mal wieder nen Fehler wirft.

Zitat von Greaka:
ich habe diesen thread nicht eröffnet, weil ich hilfe zur selbsthilfe brauche sondern ich gesehen habe dass hier sehr schlaue
leute wie bieber sind und mir meine fehler hoffentlich erklären können;)
Du brauchst keine Hilfe zur Selbsthilfe? Sondern willst lieber Zeit Deines Lebens auf "schlauere" Leute angewiesen sein? OK?
[/OT]

Zitat von Greaka:
zum beispiel das in anführungsstriche setzen: ich weiß icht was das bedeutet aber deinem kommentar zu urteilen, ist es
wohl eine absicherung gegen das automatische schließen wegen eines fehlers...
Ist ja nicht schlimm. Ich versuche es mal zu erklären:
Mit dem IF wird in Deinem Fall Zeichenfolge 1 mit Zeichenfolge 2 auf Gleichheit verglichen.
01.
IF Zeichenfolge1==Zeichenfolge2 Befehl
Zeichenfolge1 und Zeichenfolge2 sind Parameter des IF Befehls die zwingend vorhanden sein müssen. Da Zeichenfolge1 in Deinem Fall aus der vorherigen Eingabe kommt könnte diese ggf. nicht existent sein. In der Folge wäre der IF nicht vollständig und Das Skript beendet sich mit einem Fehler:
01.
rem Wenn der Operator korrekt versorgt ist sind die " egal 
02.
set operator=+ 
03.
if %operator%==+ echo %operator% ist gleich + 
04.
rem Aufgelöst: if + == + echo + ist gleich + 
05.
rem Ist der Operator nicht definiert und verwendet man im IF " geht's, da Zeichenfolge1 damit "" und vorhanden ist 
06.
set operator= 
07.
if "%operator%"=="+" echo %operator% ist gleich + 
08.
rem Aufgelöst: if "" == "+" echo  ist gleich + 
09.
rem Alernativ könnte man z.B. auch [] verwenden 
10.
if [%operator%]==[+] echo %operator% ist gleich + 
11.
rem Aufgelöst: if [] == [+] echo  ist gleich + 
12.
rem Ist der Operator nicht definiert kommt es ohne " zu einem Fehler da dem IF die Zeichenfolge1 fehlt 
13.
if %operator%==+ echo %operator% ist gleich + 
14.
rem Aufgelöst: if ==+ echo  ist gleich +
[OT]
Zitat von Greaka:
zu meiner person: ich bin 15 und möchte später entwickler werden weil mir das lösen von aufgaben durch kombinieren
spaß macht, deshalb fange ich erstml gaanz klein bei batch an.
Finde ich echt gut. Sowohl dass Du ein Berufsziel hast, als auch dass Dir das Lösen von Aufgaben Spaß macht.
Wie das ganze ohne Hilfe zur Selbsthilfe dann funktionieren soll verstehe ich dann leider nicht mehr.
[/OT]

@Skyemugen:
Zitat von Skyemugen:
Die Antwort liefert dir cmd oder echo on => Syntaxfehler ... eine Eingabe kann nicht als Ausdruck verarbeitet
werden,
Bei mir irgenwie nicht ;-(
01.
D:\temp>set /p /a var=Gib was ein jetzt: 
02.
Gib was ein jetzt: 3 
03.
 
04.
D:\temp>echo %var% 
05.
%var% 
06.
 
07.
D:\temp>

Gruß icsAT
Bitte warten ..
Mitglied: Biber
21.01.2012 um 17:56 Uhr
Moin icsAT,

zu deinem "set /p /a var=Gib was ein jetzt:"-Phänomen:

Das "Rätsel" erklärt sich schnell, wenn du mal mit "Set" am CMD-Prompt nachschaust.
>set 
/a var=44
Du hast eine Variable namens "/a var" definiert mit dem Wert 44.
Das hast du schliesslich auch verlangt - works as designed.

Die umgekehrte Reihenfolge (/a /p statt /p /a) bringt eine - je nach Win-Version - mehr oder weniger sprechende Fehlermeldung.
>set /a /p var=Gib was ein jetzt: 
Fehlender Operand
Grüße
Biber
Bitte warten ..
Mitglied: icsat
21.01.2012 um 18:14 Uhr
Hallo Biber,

danke für die Info. Ich glaube ich wäre nicht darauf gekommen, dass Variablen mit SPACE im Namen möglich sind. Aber mir war klar, dass Du eine Erklärung dafür hast

[OT]
"works as designed" war bei mir das Unwort des Jahres 2005 glaube ich. Ich habe damals bei einer größeren Softwareumstellung bei jeder Fehlermeldung vom zuständigen Hersteller die diese Rückmeldung bekommen.
[/OT]


Gruß icsAT
Bitte warten ..
Mitglied: Skyemugen
23.01.2012 um 15:05 Uhr
[OT]
Zitat von icsat:
@Skyemugen:
Bei mir irgenwie nicht ;-(

Aloha,

OS? Habe gerade mal am Arbeitsrechner getestet (Windows XP Prof x86), da ist die Ausgabe in der Tat wie von dir beschrieben, meine Syntaxfehlerausgabe erhielt ich zu Hause am Windows 7 HP x64

greetz André

@Biber, /a var definiert? Mann, was du wieder für Umgebungsvariablen aktiv hast, hab' ich glücklicherweise nicht, sonst wär mein set manchmal voll mit Krams ^__^
[/OT]
Bitte warten ..
Mitglied: Greaka
23.01.2012 um 22:00 Uhr
Zitat von icsat:
Ist ja nicht schlimm. Ich versuche es mal zu erklären:

so etwas wollte ich und meinte ich die ganze zeit mit ich brauch keine anleitung selbsthilfe;) ich kenn mich im programmieren einfach nicht gut genug aus...

Zitat von icsat:
Finde ich echt gut. Sowohl dass Du ein Berufsziel hast, als auch dass Dir das Lösen von Aufgaben Spaß macht.
Wie das ganze ohne Hilfe zur Selbsthilfe dann funktionieren soll verstehe ich dann leider nicht mehr.

weiß ich:p ihr wist ja jetzt was ich meinte;)

ich werde erstmal eure tips dankbar annehmen und falls es mir gelungen ist etwas sauberes hinzubasteln, werd ich diesen thread als gelöst markieren.
Bitte warten ..
Mitglied: icsat
24.01.2012 um 07:31 Uhr
Hi Skyemugen,

das war es dann wohl. Ich nutze Windows XP Prof x86 und es verhält sich genau wie vom Biber erklärt.


Gruß icsAT
Bitte warten ..
Mitglied: Greaka
26.01.2012 um 16:15 Uhr
eine frage habe ich noch bevor ich das hier als gelöst markiere: wie kann ich es hinbekommen dass die batch sich solange nicht schließt bis ich entweder auf das rote kreuz oben rechts gehe oder im taskmanager die batch beende?
Bitte warten ..
Mitglied: bastla
26.01.2012 um 16:22 Uhr
Hallo Greaka!

Ich kenne zwar den aktuellen Stand des Batches nicht, aber Du hattest doch ursprünglich jeweils am Ende ein "goto start" verwendet, wodurch sich praktisch eine Endlosschleife ergibt ...

Grüße
bastla
Bitte warten ..
Mitglied: Greaka
26.01.2012 um 22:28 Uhr
Es geht darum dass ich die Tipps alle angenommen habe und sich die batch trotzdichh noch unerwartet schließt...
Bitte warten ..
Mitglied: icsat
27.01.2012 um 00:11 Uhr
Hallo Greaka,

was tust du denn genau bevor sich das Skript, vermutlich mit Fehlermeldung, beendet?

Du könntest jetzt mal die Fehlermeldung (@echo on start des Skriptes aus einer cmd heraus) posten und Du könntest evtl. auch Dein aktuelles Skript posten.
Das wäre ganz klasse, weil zumindest ich gerade meine Glaskugel verliehen habe und Dir sonst kaum helfen kann. Und Bastla scheint es ähnlich zu gehen, wenn ich seinen Post richtig deute.


Gruß icsAT
Bitte warten ..
Mitglied: Greaka
28.01.2012 um 02:13 Uhr
Bei dem Script hat sich nichts verändert außer dass ich die hochkommata gesetzt habe und cls und echo fof gelöscht habe... Da sich mir ja die Möglichkeit nicht bietet eine fehlermeldung zu Posten da sich das Fenster ja einfach schließt frage ich einfach nochmal: was ist daran falsch?
Bitte warten ..
Mitglied: bastla
28.01.2012 um 09:23 Uhr
Hallo Greaka!
Da sich mir ja die Möglichkeit nicht bietet eine fehlermeldung zu Posten da sich das Fenster ja einfach schließt frage ich einfach nochmal: was ist daran falsch?
Dass sich das Fenster einfach schließt, ist falsch ...

Einen Batch solltest Du immer testen, indem Du vorweg ein CMD-Fenster öffnest und ihn dann von dort aus startest (Eingabe des Pfades oder auch durch Ziehen der Batchdatei in das Fenster) ...

Abgesehen davon sollte es aber trotzdem keine Zumutung für Dich darstellen, wie von icsAT vorgeschlagen, den aktuellen Stand des Batches nochmals (unter Verwendung der "Code"-Formatierung) zu posten ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
01.02.2012 um 16:52 Uhr
Moin Greaka,


hast du denn mitbekommen, dass du auf deine Rückfrage vom 28. Jänner diesen Jahres umgehend eine Antwort vom Experten bastla bekommen hast?

Und bist du damit schon so weit gekommen, dass wir einen grünen Hoffnungstupfer in diesem sibirisch-frostwindigen Tag bringen können?

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Schleife als FOR-SCHLEIFE (2)

Frage von mp2711 zum Thema Batch & Shell ...

Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...