cbli
Goto Top

In einer Fehler Log Datei die Dateinamen auslesen und diese auf Existenz prüfen

Ich möchte mein bestehendes Script erweitern und will aus einer Log Datei, die Fehlermeldungen von Winrar enthält, den Dateinamen auslesen lassen und mir als msgbox anzeigen lassen.
Das Problem ist,daß die Logdatei noch anderen Text enthält und der Dateiname nicht immer in der gleichen Stelle steht.
Lässt sich der Dateiname irgendwie auslesen ?
Wäre es möglich die ganze Logdatei auszulesen und irgendwie mit dem real existierenden Dateinamen zu vergleichen,z.B auf Existenz prüfen ?

Hier der Inhalt der Log Datei:


15.10.2007 12:41:44, Archiv D:\exceltemp\Excel Dateien von Herrn Mustermann.tar

15.10.2007 12:41:44 Lesefehler in der Datei .
15.10.2007 12:41:45 Das Archiv ist zerstört.


Es kann auch vorkommen ,daß die Logdatei mehrere Einträge enthält(siehe oben - diese stehen dann untereinander).
Für ein bißchen Hilfe wäre ich sehr dankbar.


mfg
Claus

Content-Key: 70961

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

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

Member: bastla
bastla Oct 15, 2007 at 13:43:11 (UTC)
Goto Top
Hallo cbli!

Bitte etwas mehr Info zum Format der einzelnen Zeilen - vor allem:

Gibt es ein Kriterium (etwa, wie in Deinem Beispiel dargestellt, "-------- " am Anfang der Zeile), an dem zu erkennen ist, dass eine Zeile einen Dateinamen enthält, oder:

Steht der Dateiname immer nach ", Archiv " als letzter Eintrag in der Zeile?

Grüße
bastla
Member: cbli
cbli Oct 15, 2007 at 14:42:32 (UTC)
Goto Top
Gibt es ein Kriterium (etwa, wie in Deinem
Beispiel dargestellt, "-------- "
am Anfang der Zeile), an dem zu erkennen ist,
dass eine Zeile einen Dateinamen
enthält, oder:


Sorry, hatte ich vergessen. Hab mal schnell ein größeres Logfile mir angeschaut und genauso ist es
Nach "---------" im LogFile kommt jedesmal der Dateinamen.
Dieser kann Leerzeichen im namen enthalten.

Hier nochmal der genaue Aufbau der Logdatei:
Meine Kommentare setze ich hinters Hochkomma '


' 1. Leerzeile
' 2. Leerzeile
15.10.2007 12:41:44, Archiv D:\exceltemp\Excel Dateien von Herrn Mustermann.tar ' stets gleich (bis auf Datum,Uhrzeiten und Dateinamen)
' Leerzeile
15.10.2007 12:41:44 Lesefehler in der Datei . ' stets gleich (bis auf Datum und Uhrzeit)
15.10.2007 12:41:45 Das Archiv ist zerstört. ' stets gleich (bis auf Datum und Uhrzeit)
' Hier kommt noch eine Leerzeile ,wenn ein 2ter Eintrag im Logfile folgt


Hoffe es ist so verständlich.
Vielen Dank

mfg
Claus
Member: bastla
bastla Oct 15, 2007 at 15:18:46 (UTC)
Goto Top
Hallo cbli!

Da ich nicht weiß, wie eine ev Weiterverarbeitung aussehen soll, zunächst nur die Grundfunktonalität:

Set fso = CreateObject("Scripting.FileSystemObject")  
sLogFile = "D:\Log.txt"  
Const sCrit1 = "--------"  
Const sCrit2 = ", Archiv "  

'Um die Länge der Suchkriterien nicht bei jedem Schleifendurchlauf  
'erneut ermitteln zu müssen, diese gleich hier speichern:  
iLenCrit1 = Len(sCrit1)
iLenCrit2 = Len(sCrit2)

sResult = ""  
Set oLogFile = fso.OpenTextFile(sLogFile, 1)
Do Until oLogFile.AtEndOfStream
	sLine = oLogFile.ReadLine
	If Left(sLine, iLenCrit1) = sCrit1 Then 'Kennung am Zeilenanfang prüfen  
		iPos = InStr(1, sLine, sCrit2, vbTextCompare) ' Position der 2. Kennung feststellen  
		If iPos Then 'Wenn 2. Kennung gefunden, ...  
			sFilePath = Mid(sLine, iPos + iLenCrit2) ' ... den dahinter befindlichen Dateipfad auslesen ...  
			If fso.FileExists(sFilePath) Then '... und auf Existenz der Datei prüfen.  
				sFileFound = "Datei gefunden:"  
			Else
				sFileFound = "Nicht gefunden:"  
			End If
			If sResult <> "" Then  
				sResult = sResult & vbCrLF & sFileFound & vbTab & sFilePath
			Else
				sResult = sFileFound & vbTab & sFilePath
			End If
		End If
	End If
Loop
oLogFile.Close
WScript.Echo sResult

Grüße
bastla
Member: cbli
cbli Oct 15, 2007 at 17:39:58 (UTC)
Goto Top
Hallo cbli!

Da ich nicht weiß, wie eine ev
Weiterverarbeitung aussehen soll,
zunächst nur die
Grundfunktonalität:

Set fso =
> CreateObject("Scripting.FileSystemObject")  
> sLogFile = "D:\Log.txt"  
> Const sCrit1 = "--------"  
> Const sCrit2 = ", Archiv "  
> 
> 'Um die Länge der Suchkriterien  
> nicht bei jedem Schleifendurchlauf
> 'erneut ermitteln zu müssen, diese  
> gleich hier speichern:
> iLenCrit1 = Len(sCrit1)
> iLenCrit2 = Len(sCrit2)
> 
> sResult = ""  
> Set oLogFile = fso.OpenTextFile(sLogFile,
> 1)
> Do Until oLogFile.AtEndOfStream
> 	sLine = oLogFile.ReadLine
> 	If Left(sLine, iLenCrit1) = sCrit1 Then
> 'Kennung am Zeilenanfang prüfen  
> 		iPos = InStr(1, sLine, sCrit2,
> vbTextCompare) ' Position der 2. Kennung  
> feststellen
> 		If iPos Then 'Wenn 2. Kennung  
> gefunden, ...
> 			sFilePath = Mid(sLine, iPos + iLenCrit2)
> ' ... den dahinter befindlichen  
> Dateipfad auslesen ...
> 			If fso.FileExists(sFilePath) Then
> '... und auf Existenz der Datei  
> prüfen.
> 				sFileFound = "Datei  
> gefunden:"  
> 			Else
> 				sFileFound = "Nicht  
> gefunden:"  
> 			End If
> 			If sResult <> "" Then  
> 				sResult = sResult & vbCrLF &
> sFileFound & vbTab & sFilePath
> 			Else
> 				sResult = sFileFound & vbTab &
> sFilePath
> 			End If
> 		End If
> 	End If
> Loop
> oLogFile.Close
> WScript.Echo sResult
> 


Habe mir gerade deinen Code angeschaut und dabei kam mir noch eine Idee.
Da ich ja eh noch jede erfolgreiche Winrar Operation in ein logfile schreiben lasse,kam mir der Gedanke einfach beide log Dateien verschmelzen zu lassen.
in die erste Log Datei wird jede mit Winrar entpackte Datei reingeschrieben,erfolgreich oder nicht.
Die Fehler log Datei (von winrar direkt erzeugt) schreibt nur die fehlerhaft entpackten Dateien(Dateinamen) hinein wie ich es schon gepostet habe.
Man könnte doch bestimmt die beiden Log Dateien miteinander vergleichen und wenn ein ,in der Fehler Log Datei stehender Dateiname, gefunden wird,dann einfach in der 1 Log Datei hinter dem Dateinamen das Wort "Fehler" einfügen.

z.B

' von mir erzeugte 1 Log Datei enthält nach Bearbeitung genau 1 Datei (Dateinamen) z.B folgenden Eintrag


Excel Dateien von Herrn Mustermann.tar


' Fehler Log Datei von Winrar sieht so aus wenn Bearbeitung der o.g Datei fehlgeschlagen

15.10.2007 12:41:44, Archiv D:\exceltemp\Excel Dateien von Herrn Mustermann.tar

15.10.2007 12:41:44 Lesefehler in der Datei .
15.10.2007 12:41:45 Das Archiv ist zerstört.

' so soll dann die Log Datei aussehen nach Vergleichen der beiden Log Dateien

Excel Dateien von Herrn Mustermann.tar Fehlerhaft entpackt ' oder ähnlicher Text


Dieses sollte natürlich alles in einer Schleife ablaufen und die bearbeitete Log Datei als msgbox oder mit notepad Aufruf ausgegeben werden.
Die Schleifenfunktion existiert schon und ist voll funktionsfähig,es müsste also "lediglich" der Teil mit dem Log Datei vergleichen und dem Schreiben der neuen Log Datei eingefügt werden.

Hier meine Schleife:

strOrdner = "d:\exceltemp"   ' Quellordner  
strExtension = "tar"  
extensiontarsize ' Wert wird über eine Inputbox definiert  
d:\tarfehler.log     ' Log Datei die die Fehler enthält  
'strDateiname = ("d:\entpackt.txt")  ' Log Datei die alle entpackten Dateien auflistet,egal mit oder ohne Fehler     weiter unten schon definiert  

For Each objDatei In objOrdner.Files
   If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) Then
      if objDatei.size > extensiontarsize then
      wshshell.popup "Folgende Tar Datei wird entpackt "  & vbNewLine & vbNewLine & objDatei.name ,2,"Hinweis"  

WshShell.Run ("c:\programme\winrar\winrar.exe e -y -v -o+ -ilogd:\tarfehler.log " & strordner & "\"  & objdatei.name & " D:\entpackt\"),,true  


' FileSystemObject objFs oeffnen  
Set objFs= CreateObject("Scripting.FileSystemObject")  

' Dateiname festlegen  
strDateiname = ("d:\entpackt.txt")  

' Einen Textstream (objTextStream) zur Textdatei oeffnen  
Set objTextStream = objFs.OpenTextFile(strDateiname,8,True)

' Inhalt fuer Datei in String strWriteString speichern:  
strWriteString = objDatei.name

' String in Datei schreiben:  
objTextStream.WriteLine strWriteString
objTextStream.WriteBlankLines(1)

' Objekte schliessen  
objTextStream.Close
Set objTextStream = Nothing
Set objFs = Nothing
set file = nothing
set fso = nothing

Falls etwas fehlen sollte,reiche ich es gerne nach.
Ansonsten vielen Dank schon mal

mfg
Claus
Member: bastla
bastla Oct 16, 2007 at 12:08:18 (UTC)
Goto Top
Hallo cbli!

Um einfacher vergleichen zu können, böte es sich an (und setze ich in meinem unten stehenden Entwurf voraus), auch bei der Erstellung des Gesamtprotokolls den vollen Dateipfad zu verwenden - in Deinem Scriptfragment oben wäre demnach die Zeile
strWriteString = objDatei.name
auf
strWriteString = objDatei.Path
zu ändern.
Die mit
objTextStream.WriteBlankLines(1)
eingefügten Leerzeilen finde ich für die weitere Verarbeitung entbehrlich und würde sie daher weglassen.
Der für Deine zusammengefasste Liste erforderliche Code (aus Zeitgründen nur oberflächlich getestet) könnte etwa so aussehen:
Set fso = CreateObject("Scripting.FileSystemObject")  
sLog = "d:\entpackt.txt"  
sErrorLog = "d:\tarfehler.log"  
sList = "d:\entpackt_komplett.txt"  

Const sCrit1 = "--------"  
Const sCrit2 = ", Archiv "  

'Um die Länge der Suchkriterien nicht bei jedem Schleifendurchlauf  
'erneut ermitteln zu müssen, diese gleich hier speichern:  
iLenCrit1 = Len(sCrit1)
iLenCrit2 = Len(sCrit2)

Const adVarChar = 200
Const MaxCharacters = 255
Const adFldIsNullable = 32

'Datenbank für Dateien und Fehlerhinweise erstellen ...  
Set FileList = CreateObject("ADOR.Recordset")  
FileList.Fields.Append "Path", adVarChar, MaxCharacters, adFldIsNullable  
FileList.Fields.Append "Error", adVarChar, MaxCharacters, adFldIsNullable  
FileList.Open

' ... und mit dem Inhalt der Logdatei befüllen  
Set oLog = fso.OpenTextFile(sLog, 1)
Do Until oLog.AtEndOfStream
	FileList.AddNew
	FileList("Path") = oLog.ReadLine  
	FileList.Update
Loop
oLog.Close

'Errorlog auslesen und Datenbank um Fehlerhinweise ergänzen  
Set oErrorLog = fso.OpenTextFile(sErrorLog, 1)
Do Until oErrorLog.AtEndOfStream
	sLine = oErrorLog.ReadLine
	If Left(sLine, iLenCrit1) = sCrit1 Then 'Kennung am Zeilenanfang prüfen  
		iPos = InStr(1, sLine, sCrit2, vbTextCompare) ' Position der 2. Kennung feststellen  
		If iPos Then 'Wenn 2. Kennung gefunden, ...  
			sFilePath = Mid(sLine, iPos + iLenCrit2) ' ... den dahinter befindlichen Dateipfad auslesen ...  
			FileList.Filter = "Path = '" & sFilePath & "'" '... und danach in der Gesamtliste suchen.  
			FileList.MoveFirst
			Do Until FileList.EOF 'Wenn die Datei gefunden wird, ...  
				FileList("Error") = " ## Fehlerhaft entpackt! ##" '... einen Fehlertext hinzufügen.  
				FileList.Update
				FileList.MoveNext
			Loop
			FileList.Filter = ""  
		End If
	End If
Loop
oErrorLog.Close

'Gesamtliste inkl Fehlerhinweisen in neue Datei ausgeben  
Set oList = fso.OpenTextFile(sList, 2, True)

FileList.Sort = "Path" 'Sortierung nach Dateipfad  
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst):  
'FileList.Sort = "Error"  
FileList.MoveFirst
Do Until FileList.EOF
	oList.WriteLine FileList.Fields.Item("Path") & FileList.Fields.Item("Error")  
	FileList.MoveNext
Loop
oList.Close
Um die beiden Dateien abzugleichen, wird eine temporäre Datenbank mit den Dateinamen (bzw -pfaden) aus "d:\entpackt.txt" befüllt und für die auch in "d:\tarfehler.log" enthaltenen Dateien um einen Fehlerhinweis ergänzt. Dabei erleichtert die "Filter"-Methode das Suchen. Zusätzlich lässt sich am Ende sehr leicht eine Sortierung vornehmen.

Falls Du auch die Existenzprüfung noch durchführen willst, lässt sich diese nach der Zeile
sFilePath = Mid(sLine, iPos + iLenCrit2)
integrieren.

Am Ende wird dann der gesamte Datenbankinhalt in eine neue Datei ausgegeben.

Grüße
bastla
Member: cbli
cbli Oct 22, 2007 at 11:40:28 (UTC)
Goto Top
Hallo Bastla

Ich bin leider erst jetzt dazu gekommen, deinen Code in mein Script einzubauen.
Wie immer wenn von dir Hilfe kommt funktioniert sie auch. Unglaublich !!
Vielen Dank erstmal dafür.
Ich hätte aber noch ein paar Fragen:

1. In der entpackt.txt + entpackt_komplett.txt sind ,nach der Verarbeitung, am Anfang 2 Leerzeilen bevor der eigentliche Inhalt anfängt.
Wie kann ich diese automatisch entfernen lassen ?

2. Hätte ich gerne ,daß vor den einzelnen Einträgen in entpackt.txt + entpackt_komplett.txt die Pfadangabe entfernt ist, also der Inhalt
dieser beiden Dateien immer mit dem Dateinamen ohne Pfad anfängt.
Die Pfadangabe brauche ich nicht und sie kann deshalb weggelassen werden.

3. Wie kann ich Dateien mit verschiedenen Dateinamen aber gleichen Dateiendungen in einem Verzeichnis so umbenennen,daß
nur die Dateiendung geändert wird,aber der Dateiname beibehalten wird

z.B:

in einem Verzeichnis sind folgende 2 Dateien (können aber auch 50 oder mehr sein)

test1.txt
lager.txt

Diese sollen mit Hilfe einer Schleife in

test1.doc
lager.doc

umbenannt werden.
Wie mache ich das,den es gibt ja bei VBSCript keine Rename Befehl,was mir völlig unverständlich ist.

Vielen Dank schon mal

mfg
Claus
Member: bastla
bastla Oct 22, 2007 at 12:38:26 (UTC)
Goto Top
Hallo cbli!

1. In der entpackt_komplett.txt sind ,nach der Verarbeitung, am Anfang 2 Leerzeilen bevor der eigentliche Inhalt anfängt. Wie kann ich diese automatisch entfernen lassen ?
Sollte sich mit der unten stehenden Version des Scripts erledigt haben.

2. Hätte ich gerne zwischen den einzelnen Einträgen in entpackt.txt + entpackt_komplett.txt eine Leerzeile stehen, zwecks besserer Übersicht.
Für "entpackt_komplett.txt" bereits unten enthalten, für "entpackt.txt" die Zeile
objTextStream.WriteLine strWriteString & vbCrLF
verwenden. (Anmerkung: Dieses und das nächste Codebeispiel beruht auf dem letzten von Dir geposteten Scriptansatz.)

3. Hätte ich gerne ,daß vor den einzelnen Einträgen in entpackt.txt + entpackt_komplett.txt die Pfadangabe entfernt ist, also der Inhalt dieser beiden Dateien immer mit dem Dateinamen ohne Pfad anfängt. Die Pfadangabe brauche ich nicht und sie kann deshalb weggelassen werden.
Dazu einfach wieder
strWriteString = objDatei.Name
schreiben.

4. Wie kann ich Dateien mit verschiedenen Dateinamen aber gleichen Dateiendungen in einem Verzeichnis so umbenennen,daß nur die Dateiendung geändert wird,aber der Dateiname beibehalten wird
Für die einzelnen "File"-Objekte mit der ".Name"-Eigenschaft ändern, etwa:
Set fso = CreateObject("Scripting.FileSystemObject") 'falls nicht ohnehin schon vorher erstellt  
sOrdner = "D:\Temp"  
sOldExt = ".txt" 'in Kleinbuchstaben angeben  
sNewExt = ".doc"  
For Each oFile In fso.GetFolder(sOrdner).Files
	sOldFile = oFile.Name 'Alter Name inkl Extension  
	If LCase(Mid(sOldFile, InStrRev(sOldFile, "."))) = sOldExt Then 'Extension isolieren und überprüfen  
		sNewFile = Left(sOldFile, InStrRev(sOldFile, ".") - 1) & sNewExt 'neuen Namen erstellen  
		If fso.FileExists(sOrdner & "\" & sNewFile) Then fso.DeleteFile(sOrdner & "\" & sNewFile) 'vorhandene Zieldatei löschen  
		oFile.Name = sNewFile 'neuen Namen zuweisen (= umbenennen)  
	End If
Next
Voraussetzung für das Umbenennen ist, dass die Zieldatei noch nicht existiert. Um dies sicher zu stellen, wird eine ev bereits vorhandene Datei vorweg gelöscht.
Hier noch die (ungetestete) "Leerzeilen"-Version des Scripts:
Set fso = CreateObject("Scripting.FileSystemObject")  
sLog = "d:\entpackt.txt"  
sErrorLog = "d:\tarfehler.log"  
sList = "d:\entpackt_komplett.txt"  

Const sCrit1 = "--------"  
Const sCrit2 = ", Archiv "  

'Um die Länge der Suchkriterien nicht bei jedem Schleifendurchlauf  
'erneut ermitteln zu müssen, diese gleich hier speichern:  
iLenCrit1 = Len(sCrit1)
iLenCrit2 = Len(sCrit2)

Const adVarChar = 200
Const MaxCharacters = 255
Const adFldIsNullable = 32

'Datenbank für Dateien und Fehlerhinweise erstellen ...  
Set FileList = CreateObject("ADOR.Recordset")  
FileList.Fields.Append "Path", adVarChar, MaxCharacters, adFldIsNullable  
FileList.Fields.Append "Error", adVarChar, MaxCharacters, adFldIsNullable  
FileList.Open

' ... und mit dem Inhalt der Logdatei befüllen  
Set oLog = fso.OpenTextFile(sLog, 1)
Do Until oLog.AtEndOfStream
	sLogLine = oLog.ReadLine
	If Trim(sLogLine) <> "" Then  
		FileList.AddNew
		FileList("Path") = sLogLine  
		FileList.Update
	End If
Loop
oLog.Close

'Errorlog auslesen und Datenbank um Fehlerhinweise ergänzen  
Set oErrorLog = fso.OpenTextFile(sErrorLog, 1)
Do Until oErrorLog.AtEndOfStream
	sLine = oErrorLog.ReadLine
	If Left(sLine, iLenCrit1) = sCrit1 Then 'Kennung am Zeilenanfang prüfen  
		iPos = InStr(1, sLine, sCrit2, vbTextCompare) ' Position der 2. Kennung feststellen  
		If iPos Then 'Wenn 2. Kennung gefunden, ...  
			sFilePath = Mid(sLine, iPos + iLenCrit2) ' ... den dahinter befindlichen Dateipfad auslesen ...  
			sFileName = Mid(sFilePath, InStrRev(sFilePath, "\") + 1) '... auf den Dateinamen reduzieren ...  
			FileList.Filter = "Path = '" & sFileName & "'" '... und danach in der Gesamtliste suchen.  
			FileList.MoveFirst
			Do Until FileList.EOF 'Wenn die Datei gefunden wird, ...  
				FileList("Error") = " ## Fehlerhaft entpackt! ##" '... einen Fehlertext hinzufügen.  
				FileList.Update
				FileList.MoveNext
			Loop
			FileList.Filter = ""  
		End If
	End If
Loop
oErrorLog.Close

'Gesamtliste inkl Fehlerhinweisen in neue Datei ausgeben  
Set oList = fso.OpenTextFile(sList, 2, True)

FileList.Sort = "Path" 'Sortierung nach Dateipfad  
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst):  
'FileList.Sort = "Error"  
FileList.MoveFirst
Do Until FileList.EOF
	oList.WriteLine FileList.Fields.Item("Path") & FileList.Fields.Item("Error") & vbCrLF  
	FileList.MoveNext
Loop
oList.Close

Grüße
bastla
Member: cbli
cbli Oct 22, 2007 at 14:36:51 (UTC)
Goto Top
Hallo Bastla

Vielen, vielen Dank.
Jetzt funktioniert die Ausgabe der entpackt_komplett.txt genau so wie ich es will.
Ich traue es mich ja kaum zu fragen,aber wie aufwändig ist es die entpackt_komplett.txt noch zusätzlich als HTML Datei auszugeben ?
Sollte einen tabellarischen Look haben,so daß z.b auch alle Dateien + Fehlermeldungen untereinanderstehen.
Leider habe ich von HTML noch keine Ahnung (soll sich aber ändern).

z.B:

Excel Datei von Herrn Maier Fehler
Txt Datei von Frau Schmidt Fehler

usw...


Vielen Dank

mfg
Claus
Member: bastla
bastla Oct 23, 2007 at 16:02:12 (UTC)
Goto Top
Hallo cbli!

Füge als 5. Zeile
sHTMLList = "d:\entpackt_komplett.html"  
ein und ersetze den Teil am Ende (nach "oErrorLog.Close" ) durch
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben  
Set oList = fso.OpenTextFile(sList, 2, True)
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True)

oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>"  
oHTMLList.WriteLine "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>"  
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>"  

FileList.Sort = "Path" 'Sortierung nach Dateipfad  
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst):  
'FileList.Sort = "Error"  
FileList.MoveFirst
Do Until FileList.EOF
	sDateiName = FileList.Fields.Item("Path")  
	sFehler = FileList.Fields.Item("Error")  
	oList.WriteLine sDateiName & sFehler & vbCrLF
	If sFehler = "" Then  
		sFehler = "&nbsp;"  
	Else
		sFehler = "Fehler"  
	End If
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "</TD><TD>" & sFehler & "</TD></TR>"  
	FileList.MoveNext
Loop

oHTMLList.WriteLine "</TABLE></BODY></HTML>"  
oList.Close
oHTMLList.Close
Die Spaltenbreiten 450 und 70 wirst Du vermutlich noch anpassen müssen, und die eher minimalistischen Formatierungen der HTML-Version kannst Du ja hoffentlich bald selbst aufpeppen ... face-smile

Grüße
bastla

P.S.: Auch diese Version ist nur sehr oberflächlich getestet.
Member: cbli
cbli Oct 23, 2007 at 17:52:21 (UTC)
Goto Top
Hallo Bastla

Wiederum Dank an dich.
Leider funktioniert die HTML Ausgabe nicht ganz perfekt.
Er setzt immer hinter alle entpackten Dateien die Fehlermeldung,auch wenn sie nachweislich
in Ordnung sind.
In der entpackt_komplett.txt wird noch alles richtig eingetragen.
Ist bestimmt nur eine Kleinigkeit.
Ansonsten reicht mir die Ausgabe in HTML völlig aus.
Einzig noch eine Leerzeile am Anfang der HTML Datei und 1 zwischen den Dateinamen zur besseren Übersicht wäre wünschenswert

Nochmals Dank

mfg
Claus
Member: bastla
bastla Oct 23, 2007 at 18:07:33 (UTC)
Goto Top
Hallo cbli!

... Leerzeile ... zwischen den Dateinamen zur besseren Übersicht ...
Dafür waren eigentlich die Gitternetzlinien gedacht ...

'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben  
Set oList = fso.OpenTextFile(sList, 2, True)
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True)

oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>"  
oHTMLList.WriteLine "<BR><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>"  
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>"  

FileList.Sort = "Path" 'Sortierung nach Dateipfad  
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst):  
'FileList.Sort = "Error"  
FileList.MoveFirst
Do Until FileList.EOF
	sDateiName = FileList.Fields.Item("Path")  
	sFehler = FileList.Fields.Item("Error")  
	oList.WriteLine sDateiName & sFehler & vbCrLF
	If Trim(sFehler) <> "## Fehlerhaft entpackt! ##" Then  
		sFehler = "&nbsp;"  
	Else
		sFehler = "Fehler"  
	End If
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "<BR>&nbsp;</TD><TD>" & sFehler & "<BR>&nbsp;</TD></TR>"  
	FileList.MoveNext
Loop

oHTMLList.WriteLine "</TABLE></BODY></HTML>"  
oList.Close
oHTMLList.Close

Grüße
bastla
Member: cbli
cbli Oct 24, 2007 at 11:11:44 (UTC)
Goto Top
Hallo Bastla

Leider funktioniert das Ganze nicht so wie es soll.
Jetzt wird hinter allen fehlerfrei entpackten Dateien die Fehlermeldung geschrieben und hinter den fehlerhaften Dateien steht nix.
Müsste genau umgedreht sein.
Könnstest du nochmal drüberschauen bitte ?

Ach ja, wie kann ich beim reinschreiben der Fehlermeldung in die entpackt_komplett.txt diese immer an einer festen Position beginnen lassen, so daß auch die entpackt_komplett.txt einen etwas tabellarischen Eindruck erhält.
Natürlich birgt das die Gefahr,daß bei einem langen Dateinamen etwas überschrieben wird,aber
da bisher eigentlich nie mehr als ca 50 Zeichen für den Dateinamen vorkamen.müsste es ausreichen.

Vielen Dank an dich,weiß gar nicht wie ich das alles hätte alleine schaffen sollen.


mfg
Claus
Member: bastla
bastla Oct 24, 2007 at 12:43:19 (UTC)
Goto Top
Hallo cbli!

Tut mir leid, dass sich das so hinzieht ... face-sad
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben  
Set oList = fso.OpenTextFile(sList, 2, True)
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True)

oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>"  
oHTMLList.WriteLine "<BR><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>"  
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>"  

FileList.Sort = "Path" 'Sortierung nach Dateipfad  
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst):  
'FileList.Sort = "Error"  
FileList.MoveFirst
Do Until FileList.EOF
	sDateiName = FileList.Fields.Item("Path")  
	sFehler = FileList.Fields.Item("Error")  
	oList.WriteLine Left(sDateiName & Space(50), 50) & sFehler & vbCrLF
	If Trim(sFehler) = "## Fehlerhaft entpackt! ##" Then  
		sFehler = "&nbsp;"  
	Else
		sFehler = "Fehler"  
	End If
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "<BR>&nbsp;</TD><TD>" & sFehler & "<BR>&nbsp;</TD></TR>"  
	FileList.MoveNext
Loop

oHTMLList.WriteLine "</TABLE></BODY></HTML>"  
oList.Close
oHTMLList.Close

Grüße
bastla
Member: cbli
cbli Oct 24, 2007 at 15:11:45 (UTC)
Goto Top
Tut mir leid, dass sich das so hinzieht ...
face-sad


Hallo Bastla

Entschuldigen musst du dich überhaupt nicht,ich bin mehr als froh das du mir so sehr hilfst.
Leider funktionierts nicht.
Er setzt wieder die Fehlermeldung hinter alle entpackten Dateien bei Ausgabe der Datei in html.
Die Textdatei geht einwandfrei.
Wenn du magst,schau nochmal drüber,ansonsten lass es gut sein und schließ den Thread hier.

Nochmals Dank

mssfg
Claus
Member: bastla
bastla Oct 24, 2007 at 15:44:49 (UTC)
Goto Top
Hallo cbli!

Letzter Versuch:
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben  
Set oList = fso.OpenTextFile(sList, 2, True)
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True)

oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>"  
oHTMLList.WriteLine "<BR><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>"  
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>"  

FileList.Sort = "Path" 'Sortierung nach Dateipfad  
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst):  
'FileList.Sort = "Error"  
FileList.MoveFirst
Do Until FileList.EOF
	sDateiName = FileList.Fields.Item("Path")  
	sFehler = FileList.Fields.Item("Error")  
	oList.WriteLine Left(sDateiName & Space(50), 50) & sFehler & vbCrLF
	If IsNull(FileList.Fields.Item("Error")) Then  
		sFehler = "&nbsp;"  
	Else
		sFehler = "Fehler"  
	End If
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "<BR>&nbsp;</TD><TD>" & sFehler & "<BR>&nbsp;</TD></TR>"  
	FileList.MoveNext
Loop

oHTMLList.WriteLine "</TABLE></BODY></HTML>"  
oList.Close
oHTMLList.Close

Grüße
bastla
Member: cbli
cbli Oct 24, 2007 at 17:47:15 (UTC)
Goto Top
Letzter Versuch:


Hallo Bastla

ES Funktioniert ! Perfekt !
Vielen Dank, muchas gracias, mille grazie.

Vielleicht kannst du mir noch bei einem Denkfehler helfen.
Ich habe folgendes Scriptfragment,daß aus einem Verzeichnis die Größen und Anzahl der gefunden xls + doc Dateien (können auch noch mehr Dateiendungen sein, hier aber nur 2) berechnet und ausgibt (Fragment war von dir).
ich möchte nun die Gesamtgröße aller gefunden Dateien erhalten,deren Endung im Array enthalten ist.


z.B:

3 Dateien wurden gefunden

2 x doc = 5 mb ' zusammen 5 mb
1 x xls = 1 mb

gesamt = 6 mb ' Diese Summe will ich erhalten


Nochmals Dank für deine Mühe und Arbeit

mfg
Claus


dTypen = Array("xls", "doc")  
For Each sTyp In dTypen

    iAnz = 0
    lGr = 0

    For Each bFile In fso.GetFolder(strordner).Files
        If LCase(fso.GetExtensionName(bFile.Path)) = sTyp then

           iAnz = iAnz + 1
           lGr = lGr + bFile.Size

end if
    next
Member: bastla
bastla Oct 24, 2007 at 18:11:18 (UTC)
Goto Top
Hallo cbli!

Etwa so:
Set fso = CreateObject("Scripting.FileSystemObject")  
strOrdner = "D:\Temp"  
dTypen = Array("xls", "doc")  
iAnz = 0
lGr = 0
For Each sTyp In dTypen
    For Each bFile In fso.GetFolder(strOrdner).Files
        If LCase(fso.GetExtensionName(bFile.Path)) = sTyp Then
           iAnz = iAnz + 1
           lGr = lGr + bFile.Size
	End If
    Next
Next
WScript.Echo CStr(iAnz) & " Dateien mit einer Gesamtgröße von " & CStr(lGr) & " Bytes."  

Grüße
bastla
Member: cbli
cbli Oct 26, 2007 at 11:24:28 (UTC)
Goto Top
Hallo Bastla !

Danke für die Hilfe. Hat sehr gut funktioniert.


Danke nochmals

mfg
Claus