Wie lässt sich in Batch eine Benutzereingabe direkt bestätigen ohne Enter drücken zu müssen?
Hallo,
ich habe vor in einem Batch-Programm eine Art "Hauptmenü" zu machen, wo jeder Menüpunkt mit einer Nummer versehen ist und man durch drücken der Nummern-Taste auf der Tastatur den Punkt auswählen kann.
Bisher habe ich das immer mit einer Variable (also set /p) und einer If-Abfrage gelöst. Allerdings muss dann ja nach der Eingabe immer nochmal Enter gedrückt werden.
Wie kann ich das umgehen, sodass nach drücken der Taste man sofort weitergeleitet wird?
1 Antwort
Das Zauberwort heist choice ...
@echo off
chcp 65001 >nul & rem Umlaute darstellen
:menuLoop
echo Menü
echo [1] mach das [2] mach jenes
echo [3] mach was anderes [H] Hurahhh
echo [X] Exit
choice /c 123hx /n /m "du hast die Wahl >"
if %errorlevel% equ 1 call :das
if %errorlevel% equ 2 echo jenes
if %errorlevel% equ 3 echo anderes
if %errorlevel% equ 4 (
for /l %%a in (1,1,3) do echo Hura!
)
rem wenn nicht x gedrückt wurde wollen wir wohl weitermachen
if %errorlevel% neq 5 (
timeout 3 >nul
cls
goto :menuLoop
)
echo und Tschüß...
timeout 2 >nul
rem batch beenden
exit /b
::::: subroutines ::::
:das
echo ich bin die Option das...
exit /b
alternativ schau Dir auch mal die Alternative ohne Choice an: https://www.gutefrage.net/frage/if-errorlevel--225-goto--funktioniert-nicht#answer-357920399
und Sprungmacros: https://www.gutefrage.net/frage/was-ist-an-dieser-if-funktion-falsch-batch#answer-353262384
dieses Vorgehen könnte bei größeren Menüs von vorteil sein:
@echo off
chcp 65001 >nul & rem Umlaute darstellen
:menuLoop
echo Menü
echo [1] mach das [2] mach jenes
echo [3] mach was anderes [H] Hurahhh
echo [X] Exit
choice /c 123hx /n /m "du hast die Wahl >"
rem abfrage vieler errorlevel werte automatisieren:
for /l %%a in (1,1,4) do (if %errorlevel% equ %%a call :sub_%%a)
rem bei allem das nicht errorlevel 5 entspricht...
if %errorlevel% neq 5 (
timeout 3 >nul
cls
goto :menuLoop
)
echo und Tschüß...
timeout 2 >nul
rem batch beenden
exit /b
::::: Subroutines ::::
:sub_1
echo Ich mache das...
exit /b
:sub_2
echo Ich mache jenes..
exit /b
:sub_3
echo Ich mach anderes..
exit /b
:sub_4
for /l %%a in (1,1,3) do echo Hura!
exit /b