biba2010
Goto Top

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:

@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]

Content-Key: 161948

Url: https://administrator.de/contentid/161948

Printed on: April 23, 2024 at 14:04 o'clock

Member: Biber
Biber Mar 03, 2011 at 09:17:52 (UTC)
Goto Top
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..

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
Member: Biba2010
Biba2010 Mar 03, 2011 at 13:37:18 (UTC)
Goto Top
Dank dir Biber!

auf die Idee bin ich gar nicht gekommen!
Natürlich funktioniert es!

Jetzt hätte ich aber gern, dass das echo (es soll ausgegeben werden, dass man mit Enter eine Ebene zurück springen kann)
am unterem Ende des Bildes bzw. des DOS-Fensters steht. Ist das möglich?

Momentan sieht es so aus.....

Cls
echo.
echo MESSENGER - CHAT mit %n%
echo ------------------------------
echo.
echo.
echo Enter - Exit
echo.
echo.
set /p m=Message:
if %m% == "" GOTO :Start
else
net send %n% %m%
Pause

ich hätte es aus aber lieber so:

Cls
echo.
echo MESSENGER - CHAT mit %n%
echo ------------------------------
echo.
echo.
echo.
set /p m=Message:
if %m% == "" GOTO :Start
else
echo.
echo.
echo.
echo.
echo.
echo Enter - Exit
echo.
net send %n% %m%
Pause


das hat sich allerdings als sehr schwierig heraus gestellt, da zuerst die eingabe abgewartet wird.
Gibt es eine Möglichkeit den Text an eine bestimmte Stelle zu schreiben?

Vielen lieben Dank im Voraus!

MfG
Biba2010
Member: rubberman
rubberman Mar 03, 2011 at 17:48:59 (UTC)
Goto Top
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 face-wink

Grüße
rubberman
Member: Biber
Biber Mar 03, 2011 at 19:54:24 (UTC)
Goto Top
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.

  • 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
Member: rubberman
rubberman Mar 03, 2011 at 20:12:35 (UTC)
Goto Top
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
Member: Biber
Biber Mar 03, 2011 at 20:42:43 (UTC)
Goto Top
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 face-wink

Grüße
Biber
Member: rubberman
rubberman Mar 03, 2011 at 21:01:08 (UTC)
Goto Top
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 face-wink).

Grüße
rubberman
Member: Biber
Biber Mar 03, 2011 at 21:12:51 (UTC)
Goto Top
Moin rubberman,

okay, da habe ich es wohl falsch gelesen.
Dann wäre meine modifizierte Antwort jetzt:
Okay, wenn der "Exit mit Enter"-hinweis an eine bestimmte Stelle soll, dann kann er nur mit in den Fenstertitel.

Oder halt in blassgrün blinkend in eine Zeile xy mit einem GotoXY-Minitool... face-wink

Grüße
Biber
Member: Biba2010
Biba2010 Mar 11, 2011 at 10:34:47 (UTC)
Goto Top
Danke für eure Antworten!
Ich hab es jetzt so gelassen, es funktioniert. ist ja erstmal egal wo der hinweis steht!
danke nochmal!


Edit:

Ich hab gleich noch ne Frage, da hier einmal mein Code steht.
Ist es möglich per Auswahl mehrere User auszuwählen, denen dann per net send die Nachricht zu schicken?

Bsp: die Eingabe ist 123, dann soll die Nachricht abgefragt werden und dann an User1, User2, und User3 verschickt werden.