racer23
Goto Top

Mit msg mehrere Zeilen angeben?

Hallo,

Ich wollte durch eine Batch-Datei ein Fenster erscheinen lassen, bei dem man mit Ok bestätigen muss.

Also mit msg * "Das ist ein Beispiel"

Doch als ich versucht habe die Nachricht über mehr als eine Zeile zu schreiben hat es nicht mehr funktioniert.

msg * "Dies ist ein weiteres
Beispiel"

Ist ja eigentlich logisch, dass das in einer Batch nicht funktioniert. Aber kann man das auf irgendeine andere Art und Weiße lösen?

Ich würde mich sehr über ein wenig Hilfe freuen.

Gruß racer23

Content-Key: 132838

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

Printed on: April 25, 2024 at 12:04 o'clock

Member: bastla
bastla Jan 06, 2010 at 20:45:39 (UTC)
Goto Top
Hallo racer23!

Erstelle eine (mehrzeilige) Textdatei (im Beispiel "msg.txt") und verwende folgende Schreibweise:
<msg.txt msg *
Grüße
bastla

P.S.: Wenn Du Deine Codeschnipsel auch schöner formatiert posten möchtest:
Member: racer23
racer23 Jan 06, 2010 at 21:07:58 (UTC)
Goto Top
Ok, vielen dank.

Es hat funktioniert.
Und deinen kleinen Tipp werde ich absofort berücksichtigen.

Oh, ich habe noch was vergessen. Der Beitrag ist zwar schon als gelöst markiert, (Kann man das eigentlich wieder rückgängig machen?)
aber ich habe mich auch gefragt wie man die Beschriftung im Rahmen des Fensters ändern kann.
Dort wird ja immer nur "Nachricht von Benutzer 06.01.2010 22:21" angezeigt.

Gruß

racer23
Member: bastla
bastla Jan 06, 2010 at 21:36:59 (UTC)
Goto Top
Hallo racer23!
Der Beitrag ist zwar schon als gelöst markiert, (Kann man das eigentlich wieder rückgängig machen?)
Ja (editieren).
wie man die Beschriftung im Rahmen des Fensters ändern kann.
... kann ich Dir leider nicht sagen (wobei ich bezweifle, dass es überhaupt möglich ist). Als Alternative käme ein (vom Batch erstelltes) VBScript in Frage, etwa:
@echo off & setlocal
set "Titel=Fenstertitel"  
set "Zeile1=Dies ist ein weiteres"  
set "Zeile2=Beispiel."  

set M=%temp%\MsgBox.vbs
>%M% echo MsgBox "%Zeile1%" ^& vbCrLf ^& "%Zeile2%", vbOKOnly, "%Titel%"  
cscript //nologo %M%
del %M%
Grüße
bastla
Member: racer23
racer23 Jan 06, 2010 at 22:04:38 (UTC)
Goto Top
Hi bastla (und danke für deine superschnellen Antworten : )

Also ich habe es ausprobiert, aber dein Code läuft bei mir nicht.
Du kannst ja noch mal ein Blick drüber werfen, vielleicht hast du ein Tippfehler oder Ähnliches drin. Kann ja selbst den Besten mal passieren.
Ich habe mein Batch natürlich auch nochmal überprüft.
Member: rubberman
rubberman Jan 06, 2010 at 22:30:00 (UTC)
Goto Top
Hallo racer23 und bastla.

Bei mir funktioniert das hervorragend. Möglich wäre, dass der Pfad in %temp% bei dir Leerzeichen enthält. Probier mal mit geänderter Zeile 6:
set M="%temp%\MsgBox.vbs"  

Grüße
rubberman
Member: bastla
bastla Jan 07, 2010 at 20:27:32 (UTC)
Goto Top
Hallo racer23!
dein Code läuft bei mir nicht.
... ist als Fehlerbeschreibung leider etwas dürftig.

Im Zweifelsfall aus dem "echo off" ein "echo on" machen und direkt in der CMD-Shell testen (oder am Ende eine Zeile mit "pause" anfügen) - dann siehst Du den Ablauf und kannst hoffentlich genauer erkennen, woran's liegt - "Tippfehler oder Ähnliches" kann ich in diesem Fall (nicht zuletzt aufgrund rubbermans Bestätigung) nämlich ausschließen ... face-wink
@rubberman
Dein Vorschlag bringt mehr Sicherheit, obwohl: Der %temp%-Pfad enthält defaultmäßig (bis zu XP) ohnehin Leerzeichen, wird aber vom System auf Kurznamen reduziert - deshalb spare ich dafür grundsätzlich die Anführungszeichen ein ...

Grüße
bastla
Member: racer23
racer23 Jan 08, 2010 at 11:36:22 (UTC)
Goto Top
Hi bastla

... ist als Fehlerbeschreibung leider etwas dürftig.

Was hätte ich denn da groß schreiben können?
Oder hast du vielleicht das da gemeint: (das war nämlich alles was dabei herauskam)
Der Befehl ""Fenstertitel"" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
C:\Users\Simon\AppData\Local\Temp\MsgBox.vbs(1, 65) Kompilierungsfehler in Micro
soft VBScript: Syntaxfehler
Aber ich versuchs jetzt mal mit rubberman's Tipp.

Ok, dabei kommt die selbe Fehlermeldung, aber trotzdem danke für deine Mühe rubberman.
Kann es sein, dass es vielleicht etwas mit meinem Betriebssystem zu tun hat (Windows 7)?
Schließlich laufen ja nicht alle Befehle auf jedem Windows.

Gruß
racer23
Member: bastla
bastla Jan 08, 2010 at 13:54:52 (UTC)
Goto Top
Hallo racer23!

Unter W7 habe ich's nicht getestet und kann daher nix dazu sagen ...

Da Du oben schreibst "Ich habe mein Batch natürlich auch nochmal überprüft.": Hast Du den Code nicht kopiert, sondern selbst eingegeben (und falls ja, magst Du ihn posten)?

Grüße
bastla
Member: racer23
racer23 Jan 08, 2010 at 20:31:50 (UTC)
Goto Top
Hallo bastla,

Man konnte es wie du schon sagst, aus meinem Komentar wahrscheinlich schlecht rauslesen, aber ich habe ihn kopiert.
Hier aber trotzdem der Code:
@echo off & setlocal
set "Titel=Fenstertitel"  
set "Zeile1=Dies ist ein weiteres"  
set "Zeile2=Beispiel."  

set M=%temp%\MsgBox.vbs
>%M% echo MsgBox "%Zeile1%" ^& vbCrLf ^& "%Zeile2%", vbOKOnly,  
"%Titel%"  
cscript //nologo %M%
del %M%

Die ganzen Angaben wie "Fenstertitel, Dies ist [...] Beispiel" habe ich erstmal so gelassen, ist ja vorerst noch egal.

Gruß
racer23
Member: bastla
bastla Jan 08, 2010 at 20:37:25 (UTC)
Goto Top
Hallo racer23!

Die Zeile 7 hat bei Dir einen Umbruch und sollte eigentlich so aussehen:
>%M% echo MsgBox "%Zeile1%" ^& vbCrLf ^& "%Zeile2%", vbOKOnly, "%Titel%"
Grüße
bastla
Member: racer23
racer23 Jan 08, 2010 at 21:14:51 (UTC)
Goto Top
Ja jetzt funktioniert's.

Aber in Zeile 7 werden doch nur die Zeilen 1 und 2 erwähnt. Wie sieht das ganze eigentlich aus,
wenn es mehr als zwei Zeilen sein sollen?

Wäre das hier möglich?
>%M% echo MsgBox "%Zeile1%" ^& vbCrLf ^& "%Zeile2%" ^& vbCrLf ^& "%Zeile3%", vbOKOnly, "%Titel%"  

und danke nochmal

Gruß
racer23

Ich glaube ich könnte mich ab und zu selbst mal ein wenig anstrengen und es, wie in diesem Fall vorher erst mal ausprobieren,
bevor ich die Fragen stelle.
Es läuft nämlich schon.

Hat sich also alles von selbst erledigt.
Member: bastla
bastla Jan 08, 2010 at 22:24:57 (UTC)
Goto Top
Hallo racer23!

Wenn's dynamisch sein soll, ließe sich das Ganze (zugegeben: nicht ganz ernst gemeint face-wink) auch noch so realisieren:
@echo off & setlocal
set "Titel=Fenstertitel"  
set "Zeile1=Noch ein"  
set "Zeile2=weiteres"  
set "Zeile3=Beispiel -"  
set "Zeile4=dieses Mal"  
set "Zeile5=sogar mit"  
set "Zeile6=6 Zeilen!"  

set M=%temp%\MsgBox.vbs
>%M% echo MsgBox _
set /a Nr=1 & set "CrLF="  
:Loop
if not defined Zeile%Nr% goto :Weiter
call set "Z=%%Zeile%Nr%%%"  
>>%M% echo %CrLf%"%Z%" ^& ^_  
set "CrLf=vbCrLF ^& "  
set /a Nr+=1
goto :Loop
:Weiter
>>%M% echo "", vbOKOnly, "%Titel%"  
cscript //nologo %M%
del %M%
Grüße
bastla
Member: racer23
racer23 Jan 08, 2010 at 23:05:03 (UTC)
Goto Top
Hi bastla,

Das läuft auch, was davon ist jetzt eigentlich ratsamer? Du meintest ja dass die zweite Version nicht ganz ernst zu nehmen sei.
Ich kann das aber selbst nicht so gut beurteilen. Denn ich kenn mich noch nicht gut genug aus,
gerade was den befehl "set" betrifft. Oder die ganzen Prozentzeichen.
Ich hab das einfach alles kopiert, aber verstanden habe ich es nur sehr grob.
Schließlich bin ich noch Anfänger, was die ganze Programmiererei angeht.

Natürlich erwarte ich nicht, dass du mir jetzt nach diesem Kommentar eine Anleitung schreibst.
(Wollte das nur mal klarstellen, nicht dass du denkst ich verstehe das auch alles.)

Und vielen dank noch mal

Gruß racer23
Member: bastla
bastla Jan 09, 2010, updated at Oct 18, 2012 at 16:40:48 (UTC)
Goto Top
Hallo racer23!
... was davon ist jetzt eigentlich ratsamer?
Die zweite Version ist vergleichsweise aufwändig - ihr einziger Vorteil wäre, dass die Zeilenanzahl dynamisch sein kann, da alle %Zeile#%-Variablen mit unmittelbar aufeinander folgenden Nummern # mit einbezogen werden - das ließe sich auch zB (mit einer kleinen Abwandlung) nutzen, um in einer "for"-Schleife ermittelte Werte in eine solche Ausgabe zu packen.

Anders formuliert: Wenn der auszugebende Text (bzw zumindest dessen Zeilenanzahl) schon feststeht, ist die Version 1 einfacher, schlanker, direkter (such es Dir aus face-wink) ...
... was den befehl "set" betrifft. Oder die ganzen Prozentzeichen.
kannst Du zunächst mit "set /?" die Onlinehilfe aufrufen; hinsichtlich der Prozentzeichen gibt es ähnliches Beispiel (mit etwas Erklärung dazu) hier.

Grüße
bastla
Member: racer23
racer23 Jan 09, 2010 at 14:40:03 (UTC)
Goto Top
Hi bastla

set M="%temp%\MsgBox.vbs"  
>%M% echo MsgBox "%Zeile1%" ^& vbCrLf ^& "%Zeile2%", vbOKOnly, "%Titel%"  
Hätte man anstatt der Variablen M, Zeile1 oder Titel eigentlich auch etwas anderes schreiben können, oder sind die so für die Message-Box festgelegt?

Also ich denke was %Beispiel% im einzelnen bedeutet, weiß ich jetzt. Und was die zweite Zeile hier angeht denke ich, wird durch den Befehl >%M% alles darauf
folgende in die MsgBo.vbs geschrieben.
Und das hier kommt dann dabei heraus. (Ich habe es aus der MsgBox.vbs herauskopiert)
MsgBox "Dies ist ein weiteres" & vbCrLf & "Beispiel.", vbOKOnly, "Fenstertitel"  
Wobei das Zeichen " ^ " vor dem "&" hier nicht mehr zu sehen ist. Deshalb würde ich gerne wissen was das in der oben dargestellten zweiten Zeile zu bedeuten hat?
Und ich nehme an das vbCrLf und vbOKOnly Befehle vür VBScripte sind.
Kennst du vielleicht ne gute Anleitung für VBS?

Ich glaube ich könnte mich ab und zu selbst mal ein wenig anstrengen und es, wie in diesem Fall vorher erst mal ausprobieren,
bevor ich die Fragen stelle.
Denn auch hier könnte ich vor auch mal selbst etwas googeln. face-smile

Ich hoffe das sind nicht zu viele Fragen auf einmal

Gruß
racer23
Member: bastla
bastla Jan 09, 2010 at 19:47:39 (UTC)
Goto Top
Hallo racer23!
Hätte man anstatt der Variablen M, Zeile1 oder Titel eigentlich auch etwas anderes schreiben können, oder sind die so für die Message-Box festgelegt?
Das sind Batch-Variablen und deren Namen können (fast) frei gewählt werden. Die MessageBox wird über VBScript realisiert, und erhält, wie Du ja schon herausgefunden hast, als auszugebende Daten bereits die Inhalte der Variablen - insofern haben die Variablennamen dafür überhaupt keine Bedeutung.
Und ich nehme an das vbCrLf und vbOKOnly Befehle vür VBScripte sind.
Fast - genau genommen sind es "benannte Konstante"; Du könntest daher zB anstelle von "vbOKOnly" auch einfach den zugeordneten Wert "0" schreiben - lesbarer ist allerdings die Version mit "vbOKOnly" (womit übrigens festgelegt wird, dass in der MessageBox nur eine Schaltfläche "OK" angeboten wird).
Wobei das Zeichen " ^ " vor dem "&" hier nicht mehr zu sehen ist.
Da in CMD mit "&" Befehle in einer Zeile verknüpft werden, muss dieses durch das vorangestellte "^" "maskiert" werden - damit wird der CMD-Interpreter informiert, dass er in diesem Fall dieses Zeichen eben nicht als Anweisung "interpretieren", sondern es einfach unverändert ausgeben soll. Auch für die Zeichen "<", "|" und ">" wäre diese Schreibweise erforderlich.
Kennst du vielleicht ne gute Anleitung für VBS?
Anfangen könntest Du zB hier ...
Ich hoffe das sind nicht zu viele Fragen auf einmal
War gerade noch zu schaffen ... face-wink

Grüße
bastla
Member: racer23
racer23 Jan 13, 2010 at 18:59:55 (UTC)
Goto Top
Hi bastla,

Also vielen dank noch mal für deine große Mühe und Hilfe,
Ich denke das war's jetzt erstmal für diesen Beitrag.
Wenn ich weitere Fragen habe melde ich mich in einem neuen Thema.

Viele Grüße

racer23