Beenden eines Teilschrittes per ESC
Hallo zusammen!
Das ist mein aller erster Post hier - ich hoffe ich mach soweit alles richtig und kriege dementsprechend schnell hilfe....
Also: ich habe für die Arbeit einen kleinen Messenger geschrieben. Dieser beruht auf einer Batchfile und nutzt nichts anderes als den Nachrichtendienst.
Ich weiß - sehr komfortabel wirkt das alles nicht. Ich weiß auch, dass es bereits einige Lösungen im Internet gibt, allerdings ist ein Download ins Firmennetz nicht möglich. Man könnte die Sicherheitsmechanismen zwar umgehen, aber das will ich nicht. Zumal ich gerade wieder ein bisschen Spaß an der Batch-Programmierung gefunden habe.
Jetzt zum eigentlichen Problem. Zum Veranschaulichen ersteinmal ein Teil des Skripts:
das ist natürlich nur ein Auszug. Ich weiß, es geht bestimmt einfacher bzw. komfortabler. Aber ich hab schon ewig nicht mehr programmiert und muss mich erstmal wieder einfuchsen. Ich bin für jeden Tipp dankbar!
zum Problem: ich möchte, dass man mit dem Drücken der ESC-Taste wieder zu der Hauptauswahl zurück kehren kann. Der * zeigt die Stelle an, an der ich gern die Funktion einbauen will. Könnt ihr mir hir weiterhelfen? ich stehe auf dem Schlauch.
MfG
[Edit Biber] Codeformatierung. [/Edit]
Das ist mein aller erster Post hier - ich hoffe ich mach soweit alles richtig und kriege dementsprechend schnell hilfe....
Also: ich habe für die Arbeit einen kleinen Messenger geschrieben. Dieser beruht auf einer Batchfile und nutzt nichts anderes als den Nachrichtendienst.
Ich weiß - sehr komfortabel wirkt das alles nicht. Ich weiß auch, dass es bereits einige Lösungen im Internet gibt, allerdings ist ein Download ins Firmennetz nicht möglich. Man könnte die Sicherheitsmechanismen zwar umgehen, aber das will ich nicht. Zumal ich gerade wieder ein bisschen Spaß an der Batch-Programmierung gefunden habe.
Jetzt zum eigentlichen Problem. Zum Veranschaulichen ersteinmal ein Teil des Skripts:
@echo off
title Messenger
: Start
Cls
echo.
echo.
echo MESSENGER - Hauptmenu
echo ---------------------
echo.
echo Mit welchem User wollen Sie chatten?
echo.
echo.
echo 1 - User1
echo 2 - User2
echo 3 - User3
echo 4 - User4
echo 5 - User5
echo.
echo 6 - anderes Ziel
echo.
echo.
set /p u=Auswahl:
echo.
IF %u% == 1 GOTO :User1
IF %u% == 2 GOTO :User2
IF %u% == 3 GOTO :User3
IF %u% == 4 GOTO :User4
IF %u% == 5 GOTO :User5
IF %u% == 6 GOTO :Zieleingabe
echo.
:User1
set n=User1
Cls
echo.
echo MESSENGER - CHAT mit %n%
echo ------------------------------
echo.
set /p m=Message:
*
net send %n% %m%
Pause
Goto User1
:User2
set n=User2
Cls
das ist natürlich nur ein Auszug. Ich weiß, es geht bestimmt einfacher bzw. komfortabler. Aber ich hab schon ewig nicht mehr programmiert und muss mich erstmal wieder einfuchsen. Ich bin für jeden Tipp dankbar!
zum Problem: ich möchte, dass man mit dem Drücken der ESC-Taste wieder zu der Hauptauswahl zurück kehren kann. Der * zeigt die Stelle an, an der ich gern die Funktion einbauen will. Könnt ihr mir hir weiterhelfen? ich stehe auf dem Schlauch.
MfG
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161948
Url: https://administrator.de/forum/beenden-eines-teilschrittes-per-esc-161948.html
Ausgedruckt am: 08.04.2025 um 22:04 Uhr
9 Kommentare
Neuester Kommentar
Moin Biba2010,
willkommen im Forum.
Der Batchinterpreter cmd.exe reagiert nicht auf die ESC-Taste bei einer SET/P-Anweisung.
Die meisten, die ähnliche interaktiven Bätche zusammenschroten, verwenden als Alternative eine Mimik wie..
Du kannst ja in der Zeile nach der Set/P-Abfrage prüfen, ob die Variable definiert/leer ist.
Grüße
Biber
willkommen im Forum.
Der Batchinterpreter cmd.exe reagiert nicht auf die ESC-Taste bei einer SET/P-Anweisung.
Die meisten, die ähnliche interaktiven Bätche zusammenschroten, verwenden als Alternative eine Mimik wie..
Set /p "meineVar=Gib einen Wert ein - oder drück ENTER für keinen Wert und Rücksprung"
Du kannst ja in der Zeile nach der Set/P-Abfrage prüfen, ob die Variable definiert/leer ist.
Grüße
Biber
Hallo Biba2010.
Batch hat leider keine grafische Benutzeroberfläche. Das heißt alles wird schön Zeile für Zeile in das Consolefenster geschrieben. Um einen Text unterhalb der aktuellen Zeile zu platzieren müsstest du also in der Lage sein mit dem Cursor dort hin zu springen, den Text auszugeben, dann wieder zurück und SET /P ausführen. Das geht mit nativem Batch definitiv nicht.
Allerdings bin ich für derartige Spielereien auch zu haben. Mit einem kleinen Zusatztoolchen ist das schon machbar. Schau dir mal hier die "gotoxy.exe" an
Grüße
rubberman
Batch hat leider keine grafische Benutzeroberfläche. Das heißt alles wird schön Zeile für Zeile in das Consolefenster geschrieben. Um einen Text unterhalb der aktuellen Zeile zu platzieren müsstest du also in der Lage sein mit dem Cursor dort hin zu springen, den Text auszugeben, dann wieder zurück und SET /P ausführen. Das geht mit nativem Batch definitiv nicht.
Allerdings bin ich für derartige Spielereien auch zu haben. Mit einem kleinen Zusatztoolchen ist das schon machbar. Schau dir mal hier die "gotoxy.exe" an
Grüße
rubberman
Ja nee, rubberman,
könnte man/frau machen... aber...
Da vertrete ich eher den Standpunkt, wenn sich der der TO schon auf ein das universell verfügbare
spartanische Batchbilighandwerkszeug einlässt, eben weil es jeder as is verwenden kann OHNE Adminrechte, ohne Zusatzinstallation etc,
dann muss er eben auch mit den Restriktionen zu leben lernen.
Ich finde pfiffiger (weil auch nicht so oft gesehen) diese Alternative, die ich früher manchmal für Logdateien-im-Auge-behalt-Batche verwendet habe.
Dann machen auch die CLS-Befehle eben nur ein paar übersichtliche Zeilen Luft...
Nach drei Mal probieren weisst du, wie klein/gross das Minimini-Appz-Fenster idealerweise sein muss,
damit ein ästhetisch vertretbares Bild entsteht.
Grüße
Biber
könnte man/frau machen... aber...
Da vertrete ich eher den Standpunkt, wenn sich der der TO schon auf ein das universell verfügbare
spartanische Batchbilighandwerkszeug einlässt, eben weil es jeder as is verwenden kann OHNE Adminrechte, ohne Zusatzinstallation etc,
dann muss er eben auch mit den Restriktionen zu leben lernen.
Ich finde pfiffiger (weil auch nicht so oft gesehen) diese Alternative, die ich früher manchmal für Logdateien-im-Auge-behalt-Batche verwendet habe.
- im Batch einen festen, immer gleichen Titel per "Title" für diese Batch verwenden
- im Batch die Vorder/Hintergrundfarbe setzen mit COLOR auf irgendwas frühlingshaftes
- im Batch mit MODE CON COLS=30 Lines=12 ein handliches Fensterchen definieren
Dann machen auch die CLS-Befehle eben nur ein paar übersichtliche Zeilen Luft...
Nach drei Mal probieren weisst du, wie klein/gross das Minimini-Appz-Fenster idealerweise sein muss,
damit ein ästhetisch vertretbares Bild entsteht.
Grüße
Biber
Hallo Biber!
Na das macht mich doch neugierig! Kannst du an einem kleinen Sinnlosbeispiel sinnvoll erklären wie's funktioniert?
MODE CON COLS ... LINES ... hat doch den Effekt, dass das Consolefenster der angegebenen Größe anpasst wird + einem CLS-artigen Nebeneffekt indem der Inhalt des Fensters gelöscht wird. Wie machst du daraus ein "Fenster im Fenster"? Durch Aufruf einer weiteren Batchdatei? Irgendwie leuchtet mir das noch nicht ein...
Grüße
rubberman
Na das macht mich doch neugierig! Kannst du an einem kleinen Sinnlosbeispiel sinnvoll erklären wie's funktioniert?
MODE CON COLS ... LINES ... hat doch den Effekt, dass das Consolefenster der angegebenen Größe anpasst wird + einem CLS-artigen Nebeneffekt indem der Inhalt des Fensters gelöscht wird. Wie machst du daraus ein "Fenster im Fenster"? Durch Aufruf einer weiteren Batchdatei? Irgendwie leuchtet mir das noch nicht ein...
Grüße
rubberman
Moin rubberman,
nein, kein "Fenster im Fenster"... nur ein kleineres CMD-Fenster mit (im obigen Beispiel dem Titel "Messenger".
Aber eben nur ein paar zentimeter breit und ein paar zeilen hoch.
Dann ist es doch kein Problem mehr, die SET/P-Abfrage immer in die letzte Fensterzeile zu bekommen, und das war doch der Plan.
Vorher ging es ja nicht, weil weder die aktuelle (virtuelle) Zeilennummer bekannt noch die 8virtuelle) letzte Zeilennummer.
Bei 12 Zeilen dagegen kann ich noch den Inhalt JEDER Zeile als "Programmierer" vorherbestimmen durch einfaches Abzählen und Testen.
"Fenster im Fenster" - hey, Bätche sind Gebrauchsschnipsel.
Nix, wo irgendein Nutzer mit überzogener Erwartungshaltung lauert
Grüße
Biber
nein, kein "Fenster im Fenster"... nur ein kleineres CMD-Fenster mit (im obigen Beispiel dem Titel "Messenger".
Aber eben nur ein paar zentimeter breit und ein paar zeilen hoch.
Dann ist es doch kein Problem mehr, die SET/P-Abfrage immer in die letzte Fensterzeile zu bekommen, und das war doch der Plan.
Vorher ging es ja nicht, weil weder die aktuelle (virtuelle) Zeilennummer bekannt noch die 8virtuelle) letzte Zeilennummer.
Bei 12 Zeilen dagegen kann ich noch den Inhalt JEDER Zeile als "Programmierer" vorherbestimmen durch einfaches Abzählen und Testen.
"Fenster im Fenster" - hey, Bätche sind Gebrauchsschnipsel.
Nix, wo irgendein Nutzer mit überzogener Erwartungshaltung lauert
Grüße
Biber
Hallo Biber,
alles klar. Und ich hatte schon gedacht mir wäre da was entgangen.
Wenn ich es richtig verstanden habe war aber der Plan ein
Enter - Exit
in der (vor-)letzten Zeile stehen zu haben, während SET /P weiter oben auf Eingabe wartet. Da sollte es bei der Aussage bleiben "Das geht mit nativem Batch definitiv nicht" und deshalb auch der Link auf das Minitool (Benutzung ist ja jedem freigestellt
).
Grüße
rubberman
alles klar. Und ich hatte schon gedacht mir wäre da was entgangen.
Wenn ich es richtig verstanden habe war aber der Plan ein
Enter - Exit
in der (vor-)letzten Zeile stehen zu haben, während SET /P weiter oben auf Eingabe wartet. Da sollte es bei der Aussage bleiben "Das geht mit nativem Batch definitiv nicht" und deshalb auch der Link auf das Minitool (Benutzung ist ja jedem freigestellt
Grüße
rubberman