Rechnen in Batch
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.
Eigentlich ist es ganz einfach...
Versucht einfach mal folgendes:
Ihr erstellt euch eine Batch-Datei mit dem Inhalt
und speichert sie beispielsweise als cal.bat in dem Ordner eurer Wahl.
Bevor wir das Script jetzt testen, eine kurze Erklärung:
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:
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
Klammern sollten möglichst immer benutzt werden, da die Punkt-vor-Strich Logik leider nicht immer beachtet wird.
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:
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.
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
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:
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:
Ausgabe: 18
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.
Zur Erklärung:
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
Wie das genau funktioniert, wie diese Funktion ins System eingegliedert werden kann und wie sowas benutzt wird, lernt Ihr hier.
Inhaltsverzeichnis
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
@Echo off
set /A math=%*
Echo %math%
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:
cal.bat 1+2
cal.bat 1 + 2
cal.bat 1+ 2
cal.bat 1 +2
cal.bat 1+2 - 3
cal.bat 1* 2 + 15-9 +3
Wie oben schon angedeutet, sind auch Klammern zulässig, sodass
3+2*3
nicht 9 sondern 15 ergibt:cal.bat 3+2*3
rem Ergebnis 9
cal.bat (3+2)*3
rem Ergebnis 15
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:
set a=15
set /A b=35
cal.bat %a%+%b%
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.
set a=15
set b=35
cal a+b
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:
- Den Pfad des Ordners der PATH-Variable hinzufügen
- 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:
cal 15+3
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.
@Echo off
if "x%1x"=="xx" goto calhelp
if "x%1x"=="x?x" goto calhelp
if "x%1x"=="x/?x" goto calhelp
set "machmalmathemitmir="
set /a machmalmathemitmir=%*
Echo %machmalmathemitmir%|findstr /C:%machmalmathemitmir% >nul 2>nul
if ERRORLEVEL 1 (Echo. & Echo Fehler & Echo. & goto calhelp)
Echo %machmalmathemitmir%
goto end
:calhelp
Echo Syntax:
Echo cal Rechenoperation
Echo.
Echo Es ist egal, ob zwischen den Operatoren und Werten
Echo Leerzeichen sind oder nicht. Klammern sind zul„ssig.
Echo Die Punkt-vor-Strich-Logik wird manchmal missachtet.
Echo Deshalb bitte Klammern verwenden!
Echo.
:end
- 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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 125284
Url: https://administrator.de/contentid/125284
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
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
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
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
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