charmeur
Goto Top

MSGBox und .txt

Hallo ihr

ich hätte gerne den inhalt einer txt Datei in eine .bat und zwar sollte der Inhalt der txt datei über eine MSGBox widergegeben werden


mein ansatz würde so lauten

@echo off & setlocal

echo "msgbox type "D:\Eigene Dateien Daten\Desktop\info.txt"|more" ,vbExclamation , "Test"> msg.vbs


msg.vbs

erase msg.vbs

endlocal & exit


aber leider geht das nicht könnte mir jemand bitte helfen

Content-ID: 170651

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Berrnd
Berrnd 29.07.2011 um 21:51:27 Uhr
Goto Top
Hi,

warum nicht alles mittels VBScript? Beispiel:
MsgBox ReadTxtFileIntoString("D:\Eigene Dateien Daten\Desktop\info.txt")  

Public Function ReadTxtFileIntoString(ByVal TxtFilePath) 'As String  
	Dim FSO 'As Scripting.FileSystemObject  
	Dim TxtFile 'As File  
	
	Set FSO = CreateObject("Scripting.FileSystemObject")  
	Set TxtFile = FSO.OpenTextFile(TxtFilePath, 1)
	
	ReadTxtFileIntoString = TxtFile.ReadAll
	
	TxtFile.Close
End Function
Gruß - Bernd
Skyemugen
Skyemugen 29.07.2011 um 21:52:07 Uhr
Goto Top
Aloha,

@echo off
>msg.vbs echo MsgBox "type " ^& Chr(34) ^& "D:\Eigene Dateien Daten\Desktop\info.txt" ^& Chr(34) ^& " |more",vbexclamation,"Test"  
msg.vbs
del msg.vbs
goto :eof

greetz André
charmeur
charmeur 29.07.2011 um 22:03:00 Uhr
Goto Top
danke für deine antwort
aber leider kommt bei mir nicht der inhalt der txt datei sondern
D:\Eigene Dateien Daten\Desktop\info.txt

habe ich was falsch gemacht ?
Skyemugen
Skyemugen 29.07.2011 um 22:09:15 Uhr
Goto Top
Aloha,

nö, ich habe dein EP falsch interpretiert und mich schon gewundert Freitagabend eben, da überliest man gerne mal den ersten Satz im EP *lach*

edit: Da bastla bereits die mehrzeilige Sache angesprochen hat, hier einfach noch einmal zur möglichen Info für eine einzeilige Textdatei
@echo off
for /f "usebackq delims=" %%s in ("D:\Eigene Dateien Daten\Desktop\info.txt") do (  
>msg.vbs echo MsgBox "%%s",vbexclamation,"test"  
)
msg.vbs
del msg.vbs
goto :eof
Das Problem hierbei ist: Das Verwenden von type und more hätte keinen Effekt (darum auch direkte Verwendung durch usebackq), da man nicht einfach so mit dieser Methode Mehrzeiler afaik in die MsgBox übernehmen kann (ohne vbcrlf), korrigiert mich, wenn ich falsch liege.

greetz André
charmeur
charmeur 29.07.2011 um 22:10:54 Uhr
Goto Top
nur intersse halber würde das ganze auch über eine txt Datei funktionieren die auf einem Web server liegt
bastla
bastla 29.07.2011 um 22:15:55 Uhr
Goto Top
Hallo @all!

Ausgehend von der Annahme, dass die Textdatei mehr als eine Zeile enthält (enthalten kann) und außerdem auch noch Parameter für die "MsgBox" benötigt werden, würde ich ebenfalls für eine VBS-Lösung plädieren - was aber nicht heißt, dass diese nicht per Batch erstellt werden kann:
@echo off & setlocal
set "Info=D:\Eigene Dateien Daten\Desktop\info.txt"  

set M=%temp%\MsgBox.vbs
>%M% echo MsgBox CreateObject("Scripting.FileSystemObject").OpenTextFile("%Info%").ReadAll, vbExclamation, "Test"  
%M%
del %M%
Grüße
bastla

P.S.: "endlocal" wird am Ende eines Batches automatisch ausgeführt, und ein "exit" ohne "/b" ist in den meisten Fällen sinnfrei ...
Berrnd
Berrnd 29.07.2011 um 22:21:15 Uhr
Goto Top
Zitat von @charmeur:
nur intersse halber würde das ganze auch über eine txt Datei funktionieren die auf einem Web server liegt
Hi,

aber klar doch ;). Beispiel:
MsgBox DownloadString("http://www.google.com/robots.txt")  

Public Function DownloadString(ByVal URL) 'As String  
	Dim WebReq 'As MsXml2.XmlHttp  
	Dim FSO 'As Scripting.FileSystemObject  
	
	Set WebReq = CreateObject("MsXml2.XmlHttp.3.0")  
	Set FSO = CreateObject("Scripting.FileSystemObject")  
	
	WebReq.Open "get", URL, False  
	WebReq.Send
	
	DownloadString = WebReq.ResponseText
End Function
Viele Grüße - Bernd
bastla
bastla 29.07.2011 um 22:30:31 Uhr
Goto Top
@Skyemugen
Da das Endergebnis etwa so aussehen sollte:
MsgBox "Zeile1" & vbCrLf & "Zeile2" & vbCrLf & "Zeile3", vbExclamation, "Test"
ist das per Batch only etwas mühsam - und wenn ja ohnehin ein VB-Script verwendet werden soll ...

Grüße
bastla
Skyemugen
Skyemugen 29.07.2011 um 22:33:47 Uhr
Goto Top
Aloha bastla,

darum schrieb ich ja
da man nicht einfach so mit dieser Methode

*gg* dass das möglich ist, war mir klar aber die Umsetzung dazu wollte ich mir zu dieser Stunde auch nicht mehr ausmalen face-wink

greetz André
bastla
bastla 29.07.2011 um 22:35:37 Uhr
Goto Top
Hallo Skyemugen!

Einfacher face-wink wäre vielleicht folgendes Ergebnis zu erreichen:
MsgBox _
"Zeile1" _  
& vbCrLf _
& "Zeile2" _  
& vbCrLf _
& "Zeile3" _  
, vbExclamation, "Test"  
nämlich etwa so:
@echo off & setlocal
set "Info=D:\Eigene Dateien Daten\Desktop\info.txt"  

set M=%temp%\MsgBox.vbs
>%M% echo MsgBox _

set /p Zeile1=<"%Info%"  
>>%M% echo "%Zeile1%" _  

for /f "delims=" %%i in ('more +1 "%Info%"') do (  
    echo ^& vbCrLf _
    echo ^& "%%i" _  
)>>%M%

>>%M% echo , vbExlamation, "Test"  

%M%
del %M%
Sinn hat das aber nicht wirklich ... face-wink

Grüße
bastla
Skyemugen
Skyemugen 29.07.2011 um 22:49:55 Uhr
Goto Top
Aloha bastla,

och ... jetzt gibst du mir schon 'nen guten Hinweis, wie es einfach umzusetzen wäre, dann drückt man kurz darauf F5 und braucht auch nicht mehr posten, weil der Herr auch gleich die Arbeit abgenommen hat *grml* face-wink

Jetzt hatte ich mich extra doch noch einmal rangesetzt ^_^ auch wenn ich es etwas einfacher lösen wollte, was erst in einem Kompilierungsfehler endete, hahaha

greetz André
bastla
bastla 29.07.2011 um 22:51:35 Uhr
Goto Top
Hallo Skyemugen!

Sorry - aber Du könntest ja noch die Berücksichtigung von Leerzeilen einbauen (auch wenn das Ganze unter "L’art pour l’art" fällt) ... face-wink

Grüße
bastla
Skyemugen
Skyemugen 29.07.2011 um 23:14:59 Uhr
Goto Top
Aloha bastla,

na,wir wollen die ja schließlich nicht unterschlagen face-wink
@echo off & setlocal
set "Info=D:\Eigene Dateien Daten\Desktop\info.txt"  

set "M=%temp%\MsgBox.vbs"  
>%M% echo MsgBox _

set /p Zeile1=<"%Info%"  
>>%M% echo "%Zeile1%" _  

for /f "delims=: tokens=1,2*" %%h in ('more +1 "%Info%" ^|findstr /n "^"') do (  
	echo ^& vbCrLf _
	if "%%i" equ "" (echo ^& " " _) else (echo ^& "%%i" _)  
)>>%M%

>>%M% echo , vbExlamation, "Test"  

%M%
del %M%
goto :eof

greetz André
charmeur
charmeur 30.07.2011 um 09:33:07 Uhr
Goto Top
Zitat von @Berrnd:
> Zitat von @charmeur:
> ----
> nur intersse halber würde das ganze auch über eine txt Datei funktionieren die auf einem Web server liegt
Hi,

aber klar doch ;). Beispiel:
MsgBox DownloadString("http://www.google.com/robots.txt")  
> 
> Public Function DownloadString(ByVal URL) 'As String  
> 	Dim WebReq 'As MsXml2.XmlHttp  
> 	Dim FSO 'As Scripting.FileSystemObject  
> 	
> 	Set WebReq = CreateObject("MsXml2.XmlHttp.3.0")  
> 	Set FSO = CreateObject("Scripting.FileSystemObject")  
> 	
> 	WebReq.Open "get", URL, False  
> 	WebReq.Send
> 	
> 	DownloadString = WebReq.ResponseText
> End Function
Viele Grüße - Bernd


hallo danke für die Antwort, da ja die meisten ein VBScript machen würden würde ich in dem fall das so machen wollen.
nur mein problem ist das ich mit dem nicht wirklich auskenne, das script passt ja genau so wie ich das haben möchte
nur noch eine letze bitte ich würde in diesem script noch gerne ein Programm starten und ausserdem würde ich noch wollen das falls die txt leer ist das keine MSGBox aufgerufen wird wäre das auch machbar?
Berrnd
Berrnd 30.07.2011 um 15:06:24 Uhr
Goto Top
Hi,

...aber selbstverständlich ist auch das machbar. ;) Beispiel Programm starten:
StartApp "C:\windows\system32\notepad.exe"  

Public Sub StartApp(ByVal Path)
	Dim Shell 'As WScript.Shell  
	
	Set Shell = CreateObject("WScript.Shell")  
	
	Shell.Run Path
End Sub
Beispiel keine MsgBox wenn Textdatei leer:
Dim txt 'As String  

txt = ReadTxtFileIntoString("C:\Windows\system.ini")  

If Not txt = "" Then  
	MsgBox txt
End If
Viele Grüße - Bernd
charmeur
charmeur 30.07.2011 um 16:16:37 Uhr
Goto Top
Super es geht natürlich aber leide rbin ich nicht in der lage das script zusammen zu fassen

also die txt datei soll auf dem web server überprüft werden ob sie leer ist oder nicht, wenn nicht dann sollte das MSGBox mit dem Inhalt aus der txt datei auf dem Server geöffnet werden übrigens wäre es toll das die datei jedes mal erneut abgefagt wird ob die txt datei leer ist oder nicht
Berrnd
Berrnd 30.07.2011 um 16:29:35 Uhr
Goto Top
Hi,

...bitteschön:
Dim txt 'As String  
txt = DownloadString("http://www.google.com/robots.txt")  
If Not txt = "" Then  
	MsgBox txt
End If

Public Function DownloadString(ByVal URL) 'As String  
	Dim WebReq 'As MsXml2.XmlHttp  
	Dim FSO 'As Scripting.FileSystemObject  
	
	Set WebReq = CreateObject("MsXml2.XmlHttp.3.0")  
	Set FSO = CreateObject("Scripting.FileSystemObject")  
	
	WebReq.Open "get", URL, False  
	WebReq.Send
	
	DownloadString = WebReq.ResponseText
End Function
Der Richtigkeit halber: Die Textdatei wird nicht vom Server überprüft sondern natürlich heruntergeladen, egal ob leer oder nicht, und dann geprüft. Dies geschieht selbstverständlich bei jedem Aufruf des Scripts erneut.

Viele Grüße - Bernd
charmeur
charmeur 31.07.2011 um 15:40:14 Uhr
Goto Top
ok nun habe ich das so weit hier mal mein ansatz

Dim txt 'As String   
txt = DownloadString("http://dyndns.or/medid/web/Script/info.txt")   

If Not txt = "" Then   
MsgBox txt 

End If 
Public Function DownloadString(ByVal URL) 'As String   
Dim WebReq 'As MsXml2.XmlHttp   
Dim FSO 'As Scripting.FileSystemObject   
Set WebReq = CreateObject("MsXml2.XmlHttp.3.0")   
Set FSO = CreateObject("Scripting.FileSystemObject")   
WebReq.Open "get", URL, False   
WebReq.Send 
DownloadString = WebReq.ResponseText 
End Function

Dim txt1'As String   

txt1 = DownloadString("http://dyndns.or/medid/web/Script/Prme.txt")   
If Not txt1 = "" Then   
StartApp txt1
End If

Public Sub StartApp(ByVal Path) 
Dim Shell 'As WScript.Shell   
Set Shell = CreateObject("WScript.Shell")   
Shell.Run Path 

End Sub


Dim txt2'As String   
txt2 = DownloadString("http://dyndns.or/medid/web/Script/er.txt")   
If txt = "" Then   
If txt1 = "" Then   
MsgBox txt2
End If 
End If 
frage wie schaffe ich es nun, das noch eine txt datei aufgerufen wird , in dem dann noch ein script steht das ausgeführt wird?

und ncih eine frage kann ich aus einer excel datei eine bestimmte zeile in eine txt datei expotieren?
Berrnd
Berrnd 31.07.2011 um 15:53:30 Uhr
Goto Top
Hi,

zu deiner ersten Frage: Was meinst du damit genau? Steht in einer txt-Datei ein weiteres VBScript oder eine Batch? Z. B. im Fall von Batch: Bennene die .txt-Datei einfach in eine .bat-Datei um und starte diese dann aus dem ersten VBScript über
StartApp "C:\deinebatch.bat"  
Zu deiner zweiten Frage: Da habe ich leider keine Ahnung, ob/wie das mit VBScript geht...

Viele Grüße - Bernd
charmeur
charmeur 31.07.2011 um 16:28:42 Uhr
Goto Top
danke für deine hilfe in der datei sollte falls nötig ein weiteres VBScript sein das dann eben ausgeführt wird
Berrnd
Berrnd 31.07.2011 um 16:50:37 Uhr
Goto Top
Hi,

na dann entsprechend so: ;)
 StartApp "C:\deinvbs.vbs"  
Gruß - Bernd
bastla
bastla 31.07.2011 um 18:33:18 Uhr
Goto Top
Hallo charmeur!
und ncih eine frage kann ich aus einer excel datei eine bestimmte zeile in eine txt datei expotieren?
Für das Lesen einer Zelle, im Beispiel A2 der ersten Tabelle, (ungetestet) etwa so:
Set oXL = WScript.CreateObject("EXCEL.application")  
With oXL
    .Visible = False
    .Workbooks.Open "D:\Eigene Dateien Daten\Desktop\Excel-Datei.xlsx"  
    txt = .Worksheets(1).Cells(2, "A").Value  
    .ActiveWorkbook.Close False
    .Application.Quit
End With
Wenn es tatsächlich eine ganze Zeile sein soll, Zeile 5 in eine passende Schleife packen und in der Variablen "txt" die Werte (passend - wie, weißt ja bisher nur Du) zusammenfassen - danach in die Textdatei schreiben ...

Grüße
bastla

P.S.: Vom eigentlichen Thema des Threads sind wir aber jetzt schon einigermaßen weit entfernt ...
charmeur
charmeur 31.07.2011 um 22:12:05 Uhr
Goto Top
hallo erst noch einmal danke für die hilfe ich hätte da noch eine kleine frage danach werde ich das ganze hier dann auch zu ende bringen und zwar

habe ich folgendes
Dim txt 'As String   


Set oXL = WScript.CreateObject("EXCEL.application")   
With oXL 
    .Visible = False 
    .Workbooks.Open "D:\Eigene Dateien Daten\Desktop\1.xlsx"   
  txt = .Worksheets(1).Range("A2", Selection.End(xlToRight)).Select  
    .ActiveWorkbook.Close False 
    .Application.Quit 
End With
MsgBox txt 


ich würde gerne haben wollen das die letzte beschriebene zelle angezeigt wird aber leider geht das wie so oft nicht
txt = .Worksheets(1).Range("A2", Selection.End(xlToRight)).Select
bastla
bastla 31.07.2011 um 22:21:57 Uhr
Goto Top
Hallo charmeur!

Darf ich Dich einladen, so wie alle anderen hier, zu benutzen (kann auch problemlos im Nachhinein hinzugefügt werden)?
Was Du vermutlich haben möchtest, wäre
txt = .Worksheets(1).Range("A2").End(xlToRight).Value
BTW: Wenn Du schon Variablen (mit "Dim") deklarierst, dann aber konsequent für alle (also auch für "oXL") - und dazu wäre auch noch ein "Option Explicit" vorweg sinnvoll ...

Grüße
bastla
charmeur
charmeur 31.07.2011 um 22:41:46 Uhr
Goto Top
danke .. und sorry wegen dem code

leider bekomme ich bei deinem code einen laufzeitfehler
bastla
bastla 31.07.2011 um 22:44:10 Uhr
Goto Top
Hallo charmeur!
leider bekomme ich bei deinem code einen laufzeitfehler
Einen bestimmten? face-wink

Eigentlich sollte aber sogar bei einer gänzlich leeren Zeile einfach nur ein Leerstring als Ergebnis geliefert werden ...

Grüße
bastla

P.S.: Danke für die Formatierung face-smile
charmeur
charmeur 31.07.2011 um 22:53:57 Uhr
Goto Top
ich habe das hier nn im script
Dim txt 'As String  


Set oXL = WScript.CreateObject("EXCEL.application")  
With oXL
.Visible = False
.Workbooks.Open "D:\Eigene Dateien Daten\Desktop\1.xlsx"  

txt = .Worksheets(1).Range("A2").End(xlToRight).Value  
.ActiveWorkbook.Close False
.Application.Quit
End With
MsgBox txt 
und der fehler lautet
800A03EC
bastla
bastla 31.07.2011 um 22:57:22 Uhr
Goto Top
Hallo charmeur!

Sorry - kann ja natürlich nicht funktionieren, da VBS keine Excel-Konstanten kennt - daher
<code typ3="plain">Const xlToRight = -4161

vorweg hinzufügen ...

Grüße
bastla