Was ist an diesem batch/cmd program falsch?

4 Antworten

Hier mal noch eine Ergänzung für den Rechner selbst. Umgehe mit der gedrückten Taste die Rückkehr zu "mystart".

@echo off

:mystart

echo Taschenrechner

echo Gib eine Berechnung ein

echo Beispiel: 4+1*8

set /p formel= Eingabe:

set /a ergebnis=%formel%

echo.

echo Das Ergebnis ist:

echo %ergebnis%

echo.

echo Press any key to return to the main menu

pause>nul

cls

goto mystart

Wie du den Fehler schnell behebst (zurücksetzen von Klick und verwenden von "") wurde ja schon gezeigt. Allerdings ist dies eine gute Stelle um choice zu verwenden.

Knapp formuliert könnte das dann so aussehen:

@echo off
:main
set /p "operand1=Erster  Operand: "
:loop
set /p "operator=Operator (+-/*): "
set /p "operand2=Zweiter Operand: "
set /a operand1 %operator%= operand2
echo:=%operand1%

choice /m "[f]ortfahren oder [n]eu beginnen" /c fn
if errorlevel 2 goto main
if errorlevel 1 goto loop

Da der Nutzer in vielen Fällen einfach auch mal gerne nur auf eine frage Enter drückt gibt es die Möglichkeit für set /p einen Defaultwert festzulegen, indem man die Variable vor der Abfrage belegt.

set "var=blubb"
set /p "var=press Enter...: "
echo %var%
pause

...das was eigentlich zum Vorteil gereicht , lässt Dein Programm unerwartet reagieren denn die Variable %klick% ist nach der ersten Eingabe von "c" biss zur Eingabe eines anderen nicht leeren Wertes mit c belegt. (es wäre nützlich wenn man das echo off gelegentlich weglässt, dann sieht man was abläuft )

:@echo off
chcp 65001 >nul & rem Umlaute anzeigen


:a
echo hier  is a
:b
echo hier is b
  rem variable  löschen (vordefinierter Zustand  nichts "" )
set "klick="
set /p "klick=drücke  c[enter] oder  nur  enter"
if "%klick%"=="c" goto :b
  rem  geht auch bei allen anderen Eingaben  nach :a
goto :a
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Das Enter ohne ein vorheriges Zeichen wird das Verhalten auslösen.
Nutze dafür einen Standardwert, um dieses Problem zu umgehen.

echo .
set /a Klick=''
set /p Klick=Druecken ...