Vorweg das Ergebnis meiner Arbeit:
05.
FOR /L %%c IN ( %countdown_takte%,-1,0) DO (
07.
ECHO "Wollen sie ... durchfuehren? [J/N]"
08.
SET /p ".=Der Vorgang wird in %%c Sekunden automatisch gestartet..." < nul
10.
CHOICE /c:jn0 /t:1 /d:0 /n
23.
ECHO Du hast %wahl% gewaehlt!
25.
ECHO Du hast nix gewaehlt deswegen setze ich wahl auf j.
32.
ECHO NE du ich mache nix!
Gehen wir Zeile für Zeile den Quelltext zusammen durch.
Mit "ECHO off" in Zeile 1 erreichen wir das die Konsole uns nicht jeden einzellnen Befehl ausgibt. Wir wollen ja schlißelich ein Sauberes Menü erstellen.
Mit "SET ERRORLEVEL=3" geben wir die Anzahl der Möglichen Optionen an. In meinem Fall sind die (J)a, (N)ein und keine Eingabe.
"SET wahl=nix" ist eine Hilfsvariable für die Auswahl im der späteren Logik.
"SET countdown_takte=15" gibt die Zeit des Countdowns in Sekunden an.
Als nächstes betreten wir die "FOR-Schleife" die von "countdown_in_sekunden" immer um "-1" bis 0 nach unten zählt.
Der Erste Schritt in unsere FOR-Schleife ist es die Konsole mit dem Befehl ClearScreen zu säubern und folgend bauen wir unser Menü mit akuteller Zeitangabe auf.
Wichtig hier: Ins Menü die Kürzel für die Auswahloptioen mit hineinschreiben, da wir die Standartausgabe im nachfolgenen Schritt ausblenden.
Der Zweite und wichtigste Schritt von allem ist der "CHOICE" Befehl. Er ist vergleichbar mit CASE OF aus anderen Sprachen.
/c Bestimmt die zu erstellende Auswahlliste. In meinem Fall (J)a, (N)ein und 0 (NULL). Unsere versteckte Auswahl die für keine Nutzereingabe steht muss als Letztes stehen!!!
/n Blendet die Auswahlliste in der Aufforderung aus. Wir möchten ja nicht das jemand unsere versteckte 3. Option sieht.
/t Bestimmt die Länge der Pause vor der Auswahl in Sekunden. Eine Sekunde sollte hier Stehen bleiben es sei den Sie wollen einen Countdown in Minutentaktung.
/d Bestimmt die Standardauswahl nach n Sekunden. Sollte der Nutzer nicht reagieren wird diese Auswahl gewählt. In diese Option muss unsere versteckte Auswahl hinein.
Die Rückgabe von Choice ist die Umgebungsvariable ERRORLEVEL:
Die Umgebungsvariable ERRORLEVEL wird auf den Index des Schlüssels gesetzt, der aus dem Auswahlsatz ausgewählt wurde. Die erste Auswahl gibt einen Wert von 1, die zweite einen Wert von 2 usw. Falls der Benutzer eine unzulässige Taste drückt, wird ein akustisches Signal wiedergegeben. Bei einem Fehlerzustand wird ein ERRORLEVEL von 255 wiedergegeben. Beim Drücken auf STRG+Untbr oder STRG+C wird ein ERRORLEVEL-Wert von 0 wiedergegeben. Führen Sie die ERRORLEVEL-Parameter in absteigender Reihenfolge auf, falls Sie diese in einem Batchprogramm verwenden.
Der Dritte und nicht weniger wichtige Schritt ist das wir bei einer Nutzereingabe die Schleife abbrechen. Dies erreichen wir durch eine Verschachtelung der IF Anweisungen.
Wie schon oben erwähnt muss Abfrage der Errorlevel Absteigend erfolgen, daher ist auch unsere Standardauswahl am Ende angegeben.
Die nun folgende Logik ist:
12.
wenn nicht NICHTS gewählt wurde dann
NICHTS ist der Index unserer Standardauswahl, in unseren Beispiel der Index "3". Gleichzeitig auch der höchste Index.
Daraufhin erfolgt die Abfrage was der Benutzer gedrückt hat. Hierbei ist zu beachten von hinten nach vorne zu arbeiten.
Also erst Index 2, dann Index 1 usw.
Ist eine entsprechende Taste gewählt wurden setzen wir die Hilfsvariable "wahl" der Nutzerauswahl gleich und springen anschließen mit "GOTO ergebnis" aus der FOR Schleife heraus.
":ergebnis" ist die Sprungmarke für den GOTO Befehl.
Und Abschließen mit IF Anweisungen die Abfrage welche Fall eingetreten ist und was daraufhin getan werden soll.
Viel Spaß mit dem Menü
Martin Heß