CMD Nach Tastendruck Sofortige Reaktion?
Einen Schönen Guten Tag
Ich suche in CMD ein Befehl der beim betätigen einer bestimmten Taste eine Funktion erfüllt ohne zusätzlich die Enter Taste drücken zu müssen
ich habe es mal mit :
set /p 1=Eingabe:
if %1% EQU 1 (
goto ...
)
bei diesem Befehl kann man eine bestimmte Taste drücken aber man muss es immer mit der Enter Taste zusätzlich bestätigen. Also fällt die leider Raus
1 Antwort
dafür gibts den Choice -Befehl.
- https://docs.microsoft.com/de-de/windows-server/administration/windows-commands/choice
- https://ss64.com/nt/choice.html
demo.cmd
@echo off
chcp 65001 >nul &rem umlaute
echo [M]ach was [W]as anderes
echo [A]ffen füttern [N]ichts tun
echo E[x]it
:loop
choice /c mwanx
if %Errorlevel% equ 1 (goto :Machwas)
if %Errorlevel% equ 2 (goto :Wasand)
if %Errorlevel% equ 3 (goto :Affen)
if %Errorlevel% equ 4 (goto :nix)
if %Errorlevel% equ 5 (exit /b)
goto :loop
:Machwas
echo hallo ich machwas
goto loop
:Wasand
echo hallo ich mach was Anderes
goto loop
:Affen
echo hallo ich füttere Affen
goto loop
:nix
echo ...lalala...
goto loop
Achtung , Choice gibt die Ausgewählte Option per Fehlercode weiter. Zwischen den Choice-befehl und der Abfrage der Errorlevel darf kein Befehl ausgeführt werden welcher seinerseits einen Errorlevel setzt!
...ansonsten muss man den Errorlevel in einer anderen Variable sichern und diese Vergleichen.
demo2.cmd
@echo off
chcp 65001 >nul
echo [M]ach was [W]as anderes
echo E[x]it
choice /c mwx
echo Errorlevel=%Errorlevel%
set "myChoice=%Errorlevel%"
ver &rem setzt immer Errorlevel auf 0
echo Errorlevel=%Errorlevel%
if %myChoice% equ 1 (echo dummmy)
if %myChoice% equ 2 (echo dummmy)
echo Schluss
pause
exit /b
choice kann nur Buchstaben und Zahlen aber keine anderen Zeichen. Werden Eingaben wie Enter, Leerzeichen oder anderes benötigt, kann man sich eines Tricks bedienen:
rchoice.cmd
@echo off
rem Umlaute richtig darstellen.
chcp 65001>nul
rem Macro %getKey% initialisieren. Ein Macro ist beqemer zu verwenden, als jedesmal dieses Monsterzeile zu schreiben.
set "getKey=for /f "tokens=2 delims=] skip=1" %%. in ('replace.exe ? . /u /w ^|find /n /v ""') do (set "getKey.Key=%%~.")"
rem test...
:MainMenu
echo:
echo Waehle :
echo [Enter] blah ^| [X] Batch Verlassen
echo [A] muh ^| [D] Lorem
echo [Y] iwas ^| [R] Rummel
echo [1]rumpel ^| [9] Miff
:Frage
%getKey%
rem eine Zeile für viele Verzweigungen
rem im in-Block können Normale Zeichen (Buchstaben und Zahlen) durch Komma oder Leerzeichen getrennt aufgelistet werden.
for %%a in ( A,D,1,9,Y,R) do (if /i "%getKey.Key%"=="%%a" call :Label%%a)
rem Zeichen, welche nicht in einm Label vewendet werden dürfen müssen wie gehabt einzeln mit if abgefragt werden
if "%getKey.Key%"=="" call :LabelEnter
rem oder vom Standartvorgehen (hier call :Label%%a) abweichende Behandlungsroutinen
if /i "%getKey.Key%"=="X" goto :Ende
rem wenn keine der vorgesehenen Tasten, wieder zum Einlesen springen
goto :frage
:Ende
echo ...und Tschüß
timeout 3 >nul
exit /b
:::: Subroutinen :::::
:LabelEnter
echo blah und Blubb
echo maus und katz jagt hund
echo:
exit /b
:LabelA
echo muh und Mäh
echo schuhu
echo:
exit /b
:LabelD
echo lorem ipsum
echo Mangni est Pumuckl
echo:
exit /b
:Label1
echo Rumpelheinzchen seiner Oma ihr Hund
echo:
exit /b
:Label9
echo Miff maff mupp
echo:
exit /b
:LabelY
echo keine Ahnung
echo:
exit /b
:LabelR
echo Ägypten?
echo:
exit /b