wie kann ich das if und else problem in batch beheben?
hallo, ich bin dabei in Batch einen "Taschenrechner" zu programmieren mit den simplen Funtionen (Addition, Subtraktion, Multiplikation, Division). Dafür brauche ich allerdings IF und ELSE. Ich habe schon vieles probiert, aber finde den Fehler in meinem Script nicht, warum "IF" nicht funktioniert..
danke schonmal im voraus, lg L
mein Script:
@echo off
echo a Addition c Multiplikation
echo b Subtraktion d Division
set/a a=a
set/a b=b
set/a c=c
set/a d=d
set /P eingabe="Rechenoperation: "
IF %eingabe% EQU %a% goto a Addition ELSE if %eingabe% EQU %b% goto b Subtraktion ELSE if %eingabe% EQU %c% goto c Multiplikation ELSE if %eingabe% EQU %d% goto d Division
:a Addition
echo Addition:
set /P summand1="Summand 1: "
set /P summand2="Summand 2: "
set/a ergebnis1=%summand1% + %summand2%
echo Summe: %ergebnis1%
goto ende
:b Subtraktion
echo Subtraktion:
set /P minuend="Minuend: "
set /P subtrahend="Subtrahend: "
set/a ergebnis2=%minuend% - %subtrahend%
echo Differenz: %ergebnis2%
goto ende
:c Multiplikation
echo Multiplikation:
set /P faktor1="Faktor 1: "
set /P faktor2="Faktor 2: "
set/a ergebnis3=%faktor1% * %faktor2%
echo Produkt: %ergebnis3%
goto ende
:d Division
echo Division:
set /P dividend="Dividend: "
set /P divisor="Divisor: "
set/a ergebnis4=%dividend% / %divisor%
echo Quotient: %ergebnis4%
:ende
pause>NUL
3 Antworten
Als erstes Label (Sprungmarken) dürfen keine Leerzeichen enthalten . Es wird ohnehin nur bis zum Leerzeichen ausgewertet....
dein:
set /a a=a
set /a b=b
set /a c=c
set /a d=d
ist totaler Müll und lässt deine if %eingabe% equ %a% endgültig scheitern...
- set /a ist die "Rechenmaschine" von Batch (alles was keine Zahlen sind, sind Variablen (auch ohne Prozentzeichen)
- ergo ist set /a a=a das gleiche wie set /a a=%a%
- leere Variablen sind bei set /a automatisch = 0
Das folgende IF %eingabe% EQU %a% wird wiefolgt ausgewertet:
- es wurde d gedrückt...
- IF d EQU 0 goto...
nur die Eingabe von 0 würde überhaupt wahr sein... ( die Leertaste oder nur Enter lassen die Batch abstürzten)
Bei if else - Statements muss der Ausführungsblock in Klammern aufgeführt werden:
if "%Variable%" equ "blah" (echo mach was) else (echo mach was anderes)
So müsste dann dein If else-Monster aussehen:
@echo off
echo a Addition c Multiplikation
echo b Subtraktion d Division
set /P eingabe="Rechenoperation: "
if "%eingabe%" equ "a" (
goto :Addition
) else (
if "%eingabe%" equ "b" (
goto :Subtraktion
) else (
if "%eingabe%" equ "c" (
goto :Multiplikation
) else (
if "%eingabe%" equ "d" (
goto :Division
)
)
)
)
rem was passiert bei falscchen Eingaben?
echo pfui
goto ende
:Addition
echo Addition:
:....
goto ende
:Subtraktion
echo Subtraktion:
:....
goto ende
:Multiplikation
echo Multiplikation:
:....
goto ende
:Division
:....
:ende
pause
sexy und übersichtlich ist anders 🤢 (ich nenne das mit dem Klammerbeutel gepudert)
...da ohnehin nur eine Eingabe zutrifft brauchst du keine else-Alternativen.
rem wie oben
set /P eingabe="Rechenoperation: "
if "%eingabe%" equ "a" goto :Addition
if "%eingabe%" equ "b" goto :Subtraktion
if "%eingabe%" equ "c" goto :Multiplikation
if "%eingabe%" equ "d" goto :Division
echo pfui
goto ende
rem wie oben
das sieht schon besser aus
.
Natürlich ist auch die Eingabe des Menüs verbesserungswürdig :
für Menüs gibt es den Choice-Befehl https://ss64.com/nt/choice.html
Die Buchstaben abcd sind für ein Menü ungünstig:
@echo off
echo Menue:
echo:
echo [A]ddition [M]ultiplikation
echo [S]ubtraktion [D]ivision
choice /c asmd /m "Rechenoperation:"
if %errorlevel% equ 1 goto :Addition
if %errorlevel% equ 2 goto :Subtraktion
if %errorlevel% equ 3 goto :Multiplikation
if %errorlevel% equ 4 goto :Division
:Addition
echo Addition:
set /P summand1="Summand 1: "
set /P summand2="Summand 2: "
set/a ergebnis1=%summand1% + %summand2%
echo Summe: %ergebnis1%
goto ende
:Subtraktion
echo Subtraktion:
set /P minuend="Minuend: "
set /P subtrahend="Subtrahend: "
set/a ergebnis2=%minuend% - %subtrahend%
echo Differenz: %ergebnis2%
goto ende
:Multiplikation
echo Multiplikation:
set /P faktor1="Faktor 1: "
set /P faktor2="Faktor 2: "
set/a ergebnis3=%faktor1% * %faktor2%
echo Produkt: %ergebnis3%
goto ende
:Division
echo Division:
set /P dividend="Dividend: "
set /P divisor="Divisor: "
set/a ergebnis4=%dividend% / %divisor%
echo Quotient: %ergebnis4%
:ende
pause
Natürlich ist das ganze eine wertlose Übung, den Rechnen und Batch ist eine zwiespältige Sache . Batch kann nur Ganze Zahlen... eine Division ergibt auch nur die Stellen vor dem Komma... (nicht einmal ordentlich gerundet)
Wir kennen Deinen Taschenrechner nicht. Im schlimmsten Fall ist die Firmware drin Schrott. Doch vorher kannst Du noch systematisch debuggen.
Finde heraus, was GENAU nicht funktioniert.
Es kann sein, die Variablenübergabe, das goto, ein Teil der Bedngung, die Sprunganweisung, eine der Sprungangweisungen:
IF %eingabe% EQU %a% goto a Addition ELSE if %eingabe% EQU %b% goto b Subtraktion ELSE if %eingabe% EQU %c% goto c Multiplikation ELSE if %eingabe% EQU %d% goto d Division
Daher vereinfache Schritt für Schritt, etwa
if 1000 > 1 then echo "if geht".
So gehst Du Element für Element durch und prüfst, woran es hakt.
Syntax Anweisung für eine if-then Schleife wäre noch spannend. Brauchen wir das "then"? Einen Strichpunkt? Eine Klammer? Ist etwas case-sensitive?
wieso schreibst du a blabla bla
goto a
und fertig ,
https://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle#GOTO
:sprungmarke
:sprung marke <-- äh was soll das den sein ?
goto sprungmarke
goto sprung marke <-- geht nun mal nicht