Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Beenden eines Teilschrittes per ESC

Frage Entwicklung Batch & Shell

Mitglied: Biba2010

Biba2010 (Level 1) - Jetzt verbinden

03.03.2011, aktualisiert 10:08 Uhr, 3858 Aufrufe, 9 Kommentare

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:

01.
@echo off  
02.
title Messenger 
03.
: Start 
04.
Cls 
05.
echo. 
06.
echo.  
07.
echo MESSENGER - Hauptmenu 
08.
echo --------------------- 
09.
echo. 
10.
echo Mit welchem User wollen Sie chatten? 
11.
echo. 
12.
echo. 
13.
echo 1 - User1 
14.
echo 2 - User2 
15.
echo 3 - User3 
16.
echo 4 - User4 
17.
echo 5 - User5 
18.
echo. 
19.
echo 6 - anderes Ziel 
20.
echo. 
21.
echo. 
22.
set /p u=Auswahl:  
23.
echo. 
24.
IF %u% == 1 GOTO :User1 
25.
IF %u% == 2 GOTO :User2 
26.
IF %u% == 3 GOTO :User3 
27.
IF %u% == 4 GOTO :User4 
28.
IF %u% == 5 GOTO :User5 
29.
IF %u% == 6 GOTO :Zieleingabe 
30.
echo. 
31.
 
32.
:User1 
33.
set n=User1  
34.
Cls  
35.
echo. 
36.
echo MESSENGER - CHAT mit %n% 
37.
echo ------------------------------ 
38.
echo. 
39.
set /p m=Message:  
40.
41.
net send %n% %m%  
42.
Pause  
43.
Goto User1  
44.
 
45.
:User2 
46.
set n=User2 
47.
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]
Mitglied: Biber
03.03.2011 um 10:17 Uhr
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
Bitte warten ..
Mitglied: Biba2010
03.03.2011 um 14:37 Uhr
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
Bitte warten ..
Mitglied: rubberman
03.03.2011 um 18:48 Uhr
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
Bitte warten ..
Mitglied: Biber
03.03.2011 um 20:54 Uhr
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
Bitte warten ..
Mitglied: rubberman
03.03.2011 um 21:12 Uhr
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
Bitte warten ..
Mitglied: Biber
03.03.2011 um 21:42 Uhr
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
Bitte warten ..
Mitglied: rubberman
03.03.2011 um 22:01 Uhr
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
Bitte warten ..
Mitglied: Biber
03.03.2011 um 22:12 Uhr
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...

Grüße
Biber
Bitte warten ..
Mitglied: Biba2010
11.03.2011 um 11:34 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Windows Update Dienst per Batch beenden (12)

Frage von Justin98 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Programm in Benutzersitzung beenden wenn Desktop gesperrt (2)

Frage von pixel0815 zum Thema Batch & Shell ...

Batch & Shell
gelöst Bestimmten wscript.exe Prozess beenden (6)

Frage von Knuefi zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...