Top-Themen

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

Anleitung Entwicklung Batch & Shell

Rechnen in Batch

Mitglied: Snowman25

Snowman25 (Level 3) - Jetzt verbinden

18.09.2009, aktualisiert 24.09.2009, 33159 Aufrufe, 5 Kommentare, 1 Danke

Rechnen zu können, kann in so mancher Stapelverarbeitung sehr nützlich sein.
Wie das genau funktioniert, wie diese Funktion ins System eingegliedert werden kann und wie sowas benutzt wird, lernt Ihr hier.



Eine kurze Leistungsübersicht


  • Beliebig viele Rechenoperation in einer Zeile
  • 32Bit-Integer mit negativen Ergebnissen
  • Hilfetext
  • Einfache Benutzung
  • Einfache Verwendung in Batchdateien
  • Möglichkeit des Rechnens mit Klammern


cal.bat


Stufe 1


Eigentlich ist es ganz einfach...
Versucht einfach mal folgendes:
Ihr erstellt euch eine Batch-Datei mit dem Inhalt
01.
@Echo off 
02.
set /A math=%* 
03.
Echo %math%
und speichert sie beispielsweise als cal.bat in dem Ordner eurer Wahl.
Bevor wir das Script jetzt testen, eine kurze Erklärung:
Zeile 1
Simpel... Ausgaben werden abgeschaltet. wir wollen ja bloß das Ergebnis
Zeile 2
Hier passiert die Magie! Die Variable math erhält als Inhalt alle Parameter, mit der die Datei aufgerufen wurde. Der Switch /A beschreibt den Inhalt dann als Zahl, bzw. als arithmetischen Ausdruck (Rechenoperation). Dadurch enthält %math% das Ergebnis der Rechnung.
Zeile 3
Jetzt wird das Ergebnis ausgegeben.

Die Verwendung ist denkbar einfach:
Man navigiert per commandprompt zu dem (die cal.bat beinhaltenden) Ordner und ruft dann die cal.bat mit Parametern auf.
Gültige Varianten sind:
01.
cal.bat 1+2 
02.
cal.bat 1 + 2 
03.
cal.bat 1+ 2 
04.
cal.bat 1 +2 
05.
cal.bat 1+2 - 3 
06.
cal.bat 1* 2 + 15-9 +3
Hier zeigt sich: Die Verwendung von Leerzeichen ist total egal. Leerzeichen können allerdings eine längere Rechnung leichter lesbar machen.
Wie oben schon angedeutet, sind auch Klammern zulässig, sodass 3+2*3 nicht 9 sondern 15 ergibt:
01.
cal.bat 3+2*3 
02.
rem Ergebnis 9 
03.
cal.bat (3+2)*3 
04.
rem Ergebnis 15
Klammern sollten möglichst immer benutzt werden, da die Punkt-vor-Strich Logik leider nicht immer beachtet wird.


Stufe 2


Jetzt können wir also normal Rechnen, aber was nützt uns das? Da könnte ich das Ergebnis ja auch gleich normal ausrechnen...
Ganz einfach: cal.bat schluckt auch vorgegebene Variablen, egal ob String oder Zahl:
01.
set a=15 
02.
set /A b=35 
03.
cal.bat %a%+%b%
Ergebnis 50
Auch hier ist es wieder egal, ob Leerzeichen zwischen Operanden und Variablen verwendet werden. Solange die Variablennamen selbst keine neuen Leerzeichen erhalten ;)

Es ist auch möglich, die Prozentzeichen der Variablen weg zu lassen.
01.
set a=15 
02.
set b=35 
03.
cal a+b
Ergibt auch 50, da der SET-Befehl mit /A Variablennamen auch ohne Prozentzeichen auswertet. Eine nicht definierte oder leere Variable erhält dabei den Wert 0.
Danke an bastla für die Korrektur


Stufe 3


Nachdem wir jetzt eine Funktionierende Batch zum einfachen Rechnen haben und diese wiederverwenden wollen, ohne jedesmal in den Ordner zu navigieren, in dem diese Batch liegt, gibt es 2 Möglichkeiten:
  1. Den Pfad des Ordners der PATH-Variable hinzufügen
  2. Die Batch nutzerfreundlich in einen Standardordner der PATH-Variable zu kopieren

Da mir die 2. Variante wesentlich besser gefällt, werde ich diese benutzen. Hierzu habe ich mir den System32-Ordner ausgesucht. Er befindet sich im Windows-Ordner und ist immer Teil von PATH. Also einfach cal.bat nach %windir%\System32 kopieren und das wars!
Nun kann man cal von überall aus starten:
01.
cal 15+3
Ausgabe: 18


Stufe 4


Um jetzt noch ein wenig Usability einzubauen, gibt es einen Hilfetext zusammen mit einem Errorhandling-System.
Ausserdem wird der Variablenname geändert, um hier Variablenkollisionen zu vermeiden.
01.
@Echo off 
02.
if "x%1x"=="xx" goto calhelp 
03.
if "x%1x"=="x?x" goto calhelp 
04.
if "x%1x"=="x/?x" goto calhelp 
05.
 
06.
	set "machmalmathemitmir=" 
07.
	set /a machmalmathemitmir=%* 
08.
	Echo %machmalmathemitmir%|findstr /C:%machmalmathemitmir% >nul 2>nul 
09.
	if ERRORLEVEL 1 (Echo. & Echo Fehler & Echo. & goto calhelp) 
10.
	Echo %machmalmathemitmir% 
11.
	goto end 
12.
	 
13.
:calhelp 
14.
	Echo Syntax: 
15.
	Echo   cal	Rechenoperation 
16.
	Echo. 
17.
	Echo		Es ist egal, ob zwischen den Operatoren und Werten 
18.
	Echo		Leerzeichen sind oder nicht. Klammern sind zul„ssig. 
19.
	Echo		Die Punkt-vor-Strich-Logik wird manchmal missachtet. 
20.
	Echo		Deshalb bitte Klammern verwenden! 
21.
	Echo. 
22.
:end
Zur Erklärung:

Zeile 1
Kennen wir ja schon.
Zeile 2-4
Auslesen des ersten Parameters, im Falle eines ?, /? oder wenn nichts übergeben wurde, wird der Hilfetext aus den Zeilen 14 bis 21 angezeigt.
Zeile 6
Die Rechenvariable wird geleert, sodass nichts mehr drin steht.
Zeile 7
Kennen wir auch noch.
Zeile 8
Etwas komplexer... Sollte etwas schiefgehen bei der Rechnung, oder die Variable ganz leer sein, so unterscheidet sich ein ECHO von ihr durch den wirklichen Inhalt. Hier werden diese beiden Werte verglichen. Ausserdem werden jegliche Ausgaben der Befehle ins Nirvana geschickt. Der /C:-Switch ist nötig, da negative Variablen sonst von FINDSTR als Parameter angesehen werden und somit kein Ergebniss geliefert wird, obwohl die Rechnung fehlerfrei ist.
Zeile 9
Tritt oben genannter Fall ein, so wird einem nochmals die Hilfe angezeigt. Der SET-Befehl beschreibt selbst, welcher Fehler aufgetreten ist.
Zeile 10
Wenn alles nach Plan verlaufen ist, wird hier das Ergebnis ausgegeben, andernfalls ist diese Stelle unerreichbar.
Zeile 11
Springt zum Ende der Datei, da dort das Label :end ist.
Zeile 13
Einsprungspunkt für die Hilfe
Zeile 14-21
Der Hilfetext, der bei Fehlern oder /? ausgegeben wird.


Abschließende Worte


Wer Rechtschreibfehler findet, darf sie behalten und mir bescheid geben.
Das Gleiche gilt für grammatikalische Fehler.
Bei Verbesserungsvorschläge oder gefundenen Fehlern würde ich mich über eine kurze Nachricht freuen.
Ausserdem hoffe ich, ich konnte jemandem helfen ;)

Snowman25
Mitglied: Jochem
24.09.2009 um 11:51 Uhr
Moin,
sodass 3+2*9 nicht 9 sondern 15 ergibt

Es ist zwar schon etwas länger her, als ich die Grundregeln der Mathematik beigebogen bekommen habe, aber ob mit oder ohne Klammer ==> die Gleichung geht so nicht auf.

Entweder Du ersetzt das "+" durch ein "-". Und auch dann ist das Ergebnis nur korrekt, wenn die Vorzeichen außer Acht bleiben.
Oder Du ersetzt die "9" in der Beispiel-Gleichung durch eine "3".

Gruß J chem
Bitte warten ..
Mitglied: Snowman25
24.09.2009 um 13:04 Uhr
Huch, hab ich mich doch glatt vertippt
In der Codebox ist es ja wenigstens richtig. Danke

Zitat von Jochem:
Gruß J chem

Gruß Snow
Bitte warten ..
Mitglied: MC-Benj
07.02.2014 um 09:23 Uhr
Nur gibt 3+2*9 auch nicht 15^^

"Punkt vor Strich!"

Also 9*2 = 18
18 + 3 = 21

Also ergibt es 21 ;)
Bitte warten ..
Mitglied: Snowman25
07.02.2014, aktualisiert um 09:29 Uhr
Hallo MC-Benj,

ich hatte mich damals vertippt und aus Versehen eine 9 statt einer 3 in der Anleitung gehabt. (3. Codebox Stufe 1)
Die richtige Rechnung ist 3+2*3
Inzwischen ist das aber korrigiert.

Gruß,
Snowman25
Bitte warten ..
Mitglied: MC-Benj
07.02.2014 um 09:31 Uhr
Zitat von Snowman25:

Hallo MC-Benj,

ich hatte mich damals vertippt und aus Versehen eine 9 statt einer 3 in der Anleitung gehabt. ([content:#toc-3 3. Codebox Stufe
1]
)
Die richtige Rechnung ist 3+2*3
Inzwischen ist das aber korrigiert.

Gruß,
Snowman25

Ok :D Gruss MC-Benj
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch-Script für die Messung der Netzwerkgeschwindigkeit
Anleitung von KraemerBatch & Shell10 Kommentare

Moin zusammen, ich habe mich gerade eben hingesetzt, und eines meiner Scripte ein wenig zeigbar überarbeitet. Da die eine ...

Batch & Shell
Batch - ein paar Basics die man kennen sollte
Tipp von PedantBatch & Shell5 Kommentare

Hallo Batchfreunde, in den letzten Tagen habe ich ein paar Dinge über Batch gelernt, die eigentlich zu den Basics ...

Batch & Shell
Batch Übung zum Desktop Switchen
Anleitung von TechnoXBatch & Shell7 Kommentare

Guten Tag, für mich war es eine Trainingsübung. Da ich mich fragte - wie kann ich meine Icons auf ...

Batch & Shell
Batch zum Zurücksetzen eines lokalen Profils
Tipp von Mr.ErrorBatch & Shell

Ahoi! Mir ist in diesem Forum schon sehr oft geholfen worden und daher wollte ich auch mal was zurück ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...