Erkennen ob eine Taste gedrückt wurde (und wenn möglich den "Piepton" bei falscher Taste unterdrücken)
Liebe Batch-Community,
ich arbeite gerade an einem Programm und möchte, dass erkannt wird, ob "W", "S" oder "E" gedrückt wurde und dieser Wert dann als die Variable %menue_pressed% festgelegt wird.
Außerdem soll bei einer falschen Taste der normal ertönende "Piepton" unterdrückt werden. Ist das irgendwie möglich? Ich habe das schonmal mit "errorlevel" ausprobiert, doch es hat nicht
funktioniert. Ich hoffe mir kann hierbei jemand weiterhelfen. =)
(Wenn das mit dem Unterdrücken des Pieptons nicht möglich ist, ist es auch nicht so schlimm.)
Hier nochmal ein Beispiel:
*Der Benutzer drückt die Taste "W"*
"W" wird als String für die Variable %menue_pressed% festgelegt.
Dann wird der Wert als Text ausgegeben:
ich arbeite gerade an einem Programm und möchte, dass erkannt wird, ob "W", "S" oder "E" gedrückt wurde und dieser Wert dann als die Variable %menue_pressed% festgelegt wird.
Außerdem soll bei einer falschen Taste der normal ertönende "Piepton" unterdrückt werden. Ist das irgendwie möglich? Ich habe das schonmal mit "errorlevel" ausprobiert, doch es hat nicht
funktioniert. Ich hoffe mir kann hierbei jemand weiterhelfen. =)
(Wenn das mit dem Unterdrücken des Pieptons nicht möglich ist, ist es auch nicht so schlimm.)
Hier nochmal ein Beispiel:
*Der Benutzer drückt die Taste "W"*
"W" wird als String für die Variable %menue_pressed% festgelegt.
Dann wird der Wert als Text ausgegeben:
@echo off
echo %menue_pressed%
W
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 584533
Url: https://administrator.de/contentid/584533
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
CHOICE
Piepton ist built-in bei choice und lässt sich nicht unterdrücken. Wenn das ein must-have ist, kann ich dir noch ein ellenlanges Workaround hinterher schieben …
Steffen
@echo off &setlocal
choice /c WSE /n /m "Druecke W, S oder E: "
if errorlevel 3 (set "menue_pressed=E") else if errorlevel 2 (set "menue_pressed=S") else set "menue_pressed=W"
echo %menue_pressed%
pause
Steffen
Was genau bewirkt der Befehl "setlocal" am Anfang?
Das erzeugt ein Subenvironment, das bei Scriptende oder
endlocal
wieder verlassen wird. Änderungen der Umgebung (bspw. Variablenwerte) sind auf diese Scope beschränkt. Für stand-alone Scripts die du per Doppelklick ausführst, ist das weniger interessant. Wenn du das Script aber aus einer CMD Shell heraus ausführst, würden diese Änderungen der Umgebung auch in dieser Shell wirksam. Wenn du dann das nächste Script aus derselben Shell ausführst, hast du die vordefinierten Variablen aus dem vorhergehenden Aufruf auch dort wieder, was zu unerwarteten Nebenwirkungen führen kann. Beispielsweise wenn du ein if defined
mit einem Variablenname ausführst, bei dem du davon ausgehst, dass die Variable nicht definiert wurde, aber tatsächlich doch bereits von der Shell vererbt wurde.Steffen
Das lässt sich nicht verallgemeinern. Es ist mein persönliches Default weil es in den meisten Fällen entweder nützlich ist oder zumindest nicht schadet. Du musst von Fall zu Fall entscheiden, anhand dessen was ich dir bezüglich des Subenvironments geschrieben habe.
Ausgabe ist
Kontraproduktiv ist es dort, wo du willst dass das Environment übernommen werden soll.
Bspw.:
caller.bat
settings.bat
@echo off
set "a=1"
echo a=%a%
setlocal
:: 1 wird in das Subenvironment vererbt
echo a=%a%
:: a wird geändert
set "a=2"
echo a=%a%
:: Änderung wird unwirksam
endlocal
echo a=%a%
pause
a=1
a=1
a=2
a=1
Kontraproduktiv ist es dort, wo du willst dass das Environment übernommen werden soll.
Bspw.:
caller.bat
@echo off &setlocal
call "settings.bat"
echo %a%
echo %b%
pause
settings.bat
:: hier wäre das setlocal kontraproduktiv, da die Definitionen der Variablen nach Beenden des Scripts unwirksam würden
set "a=1"
set "b=2"