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-Key: 303094

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

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

Member: MrCount
MrCount Apr 28, 2016 at 07:47:08 (UTC)
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
Member: Saschaaaaa
Saschaaaaa Apr 28, 2016 at 07:58:29 (UTC)
Goto Top
Ja sollte man zwar machen. Aber dann müsste ich es in der For Schleife jedes mal wieder öffnen....
Member: MrCount
MrCount Apr 28, 2016 at 08:04:50 (UTC)
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"
Member: Saschaaaaa
Saschaaaaa Apr 28, 2016 at 08:25:47 (UTC)
Goto Top
Okay ja Stimmt.
Dennoch selber Fehler in selber Zeile bei i = 28
Member: Saschaaaaa
Saschaaaaa Apr 28, 2016 updated at 08:42:31 (UTC)
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?
Member: Biber
Biber Apr 28, 2016 at 11:34:25 (UTC)
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
Member: Saschaaaaa
Saschaaaaa Apr 28, 2016 updated at 11:58:29 (UTC)
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
Member: Saschaaaaa
Saschaaaaa Apr 28, 2016 at 17:15:40 (UTC)
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
Member: Saschaaaaa
Saschaaaaa Apr 29, 2016 updated at 09:36:59 (UTC)
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
Mitglied: 116301
Solution 116301 Apr 29, 2016, updated at Apr 30, 2016 at 08:10:35 (UTC)
Goto Top
Hallo Sascha!

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

Gruß Dieter
Member: Saschaaaaa
Saschaaaaa May 03, 2016 at 04:04:07 (UTC)
Goto Top
Danke Dieter,

genau so etwas habe ich gesucht!