saschaaaaa
Goto Top

VBS schreibt bestimmte Variable nicht in Textdatei

Hallo Community,

kann gut sein das in dem Script ein paar mehr Fehler sind. Mir geht es aber aktuell nur um eins.
Und zwar läuft es gut bis i = 28, dann kommt der Fehler:

Skript: C:\Users\Ich\Desktop\neu.vbs
Zeile: 15
Zeichen: 1
Fehler: Ungültiger Prozeduraufruf oder ungültiges Argument
Code: 800A0005
Quelle: Laufzeitfehler in Microsoft VBScript

strValue macht hier das Problem, nehme ich es weg geht es bis zum Ende durch.
In strValue steht bei i = 28, 191 kBit/s
Wenn ich i = 28 überspringe läuft er bei i = 246 auf Fehler, da steht in strValue 22%
Überspringe ich auch das läuft er bei i = 303 auf Fehler, diesmal ist strValue 1736 kBit/s

(Überspringen tue ich mit: )
if i = 28 then
       i = i + 1
end if


Wenn ich anstatt

objFile.WriteLine i & " " & strHeader& "__________________" & strValue

das hier

Wscript.echo i & " " & strHeader& "__________________" & strValue

nehme klappt alles und er gibt mit alles einzeln aus.
Ich brauche es aber in einer Textdatei.

Hier nun der Code
Set objShell = CreateObject("Shell.Application")  

Dim objFSO, objFile
Const ForWriting = 2
Const Create = true

Set objFolder = objShell.NameSpace("C:\Users\Ich\Desktop")  
Set objFolderItem = objFolder.ParseName("Big Buck Bunny.mp4")  
Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")  
Set objFile = objFSO.OpenTextFile("C:\Users\Ich\Desktop\test.txt", ForWriting, Create)  

for i = 0 to 308
    strHeader = objFolder.GetDetailsOf(objFolder.Items, i)
    strValue = objFolder.GetDetailsOf(objFolderItem, i)
objFile.WriteLine i & " " & strHeader& "__________________" & strValue  
next
Wscript.Echo "Fertig"  

Hoffe das Thema passt zur Frage

Grüße
Sascha

Content-ID: 303094

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

Ausgedruckt am: 17.11.2024 um 21:11 Uhr

MrCount
MrCount 28.04.2016 um 09:47:08 Uhr
Goto Top
Moin,

fehlt da nicht ein objFile.Close ?

Set objFSO=CreateObject("Scripting.FileSystemObject")  

outFile="c:\test\test.txt"  
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test string" & vbCrLf  
objFile.Close
Saschaaaaa
Saschaaaaa 28.04.2016 um 09:58:29 Uhr
Goto Top
Ja sollte man zwar machen. Aber dann müsste ich es in der For Schleife jedes mal wieder öffnen....
MrCount
MrCount 28.04.2016 um 10:04:50 Uhr
Goto Top
Wieso in der For-Schleife??
Es wird doch vorher auch schon geöffnet, also kannst du es nach der For-Schleife schließen... also nach dem "next"
Saschaaaaa
Saschaaaaa 28.04.2016 um 10:25:47 Uhr
Goto Top
Okay ja Stimmt.
Dennoch selber Fehler in selber Zeile bei i = 28
Saschaaaaa
Saschaaaaa 28.04.2016 aktualisiert um 10:42:31 Uhr
Goto Top
Okay also Scheinbar ist das Problem das ich mit
objFolder.GetDetailsOf(objFolderItem, i)
ein Objekt haben will und
191 kBit/s
scheinbar ein String sein soll....
Denn:

Dim strTest
Set strTest = objFolder.GetDetailsOf(objFolderItem, 28)

Bringt mir den Fehler:

Zeile: 2
Zeichen: 1
Fehler: Objekt erforderlich: '[string: "191 kBit/s"]'

Kenne mich nicht besonders gut aus, weiß jemand wie ich es trotzdem in die .txt bekomme?
Biber
Biber 28.04.2016 um 13:34:25 Uhr
Goto Top
Moin Saschaaaaa,

wieso meinst du denn, einer Stringvariable (zumindest benennst du diese doch strTest ) einen Wert mit Set strTest =... zuweisen zu müssen?

Schreib einfach
strTest = <irgendwas, was einen String repräsentiert

Grüße
Biber
Saschaaaaa
Saschaaaaa 28.04.2016 aktualisiert um 13:58:29 Uhr
Goto Top
Wie gesagt, kenne mich da nicht genau aus. Aber auch wenn ich das ausbessere bin ich wieder bei meinem Fehler:
Fehler: Ungültiger Prozeduraufruf oder ungültiges Argument
Und er schreibt es nicht in die Text Datei.

Also:
i=28
strHeader=Bitrate
strValue=191 kBit/s

wenn ich nun
objFile.WriteLine i & " " & strHeader& "__________________" & strValue  
mache kommt die Fehlermeldung:
Fehler: Ungültiger Prozeduraufruf oder ungültiges Argument
Saschaaaaa
Saschaaaaa 28.04.2016 um 19:15:40 Uhr
Goto Top
Okay, Bin schon etwas weiter und weiß nun genau was der Fehler ist, aber habe immernoch keinen Plan was ich dagegen tun kann.

Auf dem Bild sieht man bei 303, 305 und 308 vor der ersten zahl ein Zeichen, genauer gesagt ein Unicode Zeichen.
Das verursacht das Problem!
wenn ich es als ANSI abspeichere (in einer .txt) dann erscheint ?1
Nun versuche ich diese Sonderzeichen rauszunehmen, mit:
strv = System.Text.RegularExpressions.Regex.Replace(strv, "[\W]", " ")  
\W sollte alles bis auf A-Z,a-z,0-9 mit einem [Leerzeichen], richtig?

Wenn ich es nun ausführe sagt er mir:
Fehler: Objekt erforderlich: 'System'

Da weiß ich nun nicht weiter......

Bin für jeden Tipp dankbar

Grüße
Sascha
d37ccc5a5d57b02773daf60127808053
Saschaaaaa
Saschaaaaa 29.04.2016 aktualisiert um 11:36:59 Uhr
Goto Top
Okay bin inzwischen auf eine Lösung gekommen:

Das in einer .vbs
Set objShell = CreateObject("Shell.Application")  

Set objFolder = objShell.NameSpace("C:\Users\Ich\Desktop")  
Set objFolderItem = objFolder.ParseName("bunny.mp4")  

for i = 0 to 308
	strHeader = objFolder.GetDetailsOf(objFolder.Items, i)
	strValue = objFolder.GetDetailsOf(objFolderItem, i)
	Wscript.Echo i & " " & strHeader & " " & strValue  
next

und diese in einer Batch damit aufrufen:
Cscript.exe //NoLogo neu.vbs >C:\neu.txt
natürlich sollten beide im selben Verzeichnis liegen.

Damit bekommt man dann alle 308 Eigenschaften einer Datei in eine Textdatei face-smile
Wenn es interresiert:
Wenn man anstatt:
C:\neu.txt
eine neu.txt erstellt und diese auf Unicode Codierung umstellt,
dann das hier:
C:\neu.txt
macht, bekommt man einen langen chinesischen Text. Keine Ahnung ob das die Unicode Übersetzung ist oder sonst was ist. Jedenfalls ergibt es übersetzt überhaupt keinen Sinn.

Grüße Sascha
116301
Lösung 116301 29.04.2016, aktualisiert am 30.04.2016 um 10:10:35 Uhr
Goto Top
Hallo Sascha!

Versuch es so:
    strValue = objFolder.GetDetailsOf(objFolderItem, i)
    strValue = Replace(strValue, ChrW(8206),"")  
    objFile.WriteLine i & " " & strHeader & "__________________" & strValue  

Gruß Dieter
Saschaaaaa
Saschaaaaa 03.05.2016 um 06:04:07 Uhr
Goto Top
Danke Dieter,

genau so etwas habe ich gesucht!