Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung VB for Applications

Mitglied: cbli

cbli (Level 1) - Jetzt verbinden

15.10.2007, aktualisiert 26.10.2007, 5988 Aufrufe, 18 Kommentare

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.


Mit freundlichen Grüßen
Claus
Mitglied: bastla
15.10.2007 um 15:43 Uhr
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
Bitte warten ..
Mitglied: cbli
15.10.2007 um 16:42 Uhr
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

Mit freundlichen Grüßen
Claus
Bitte warten ..
Mitglied: bastla
15.10.2007 um 17:18 Uhr
Hallo cbli!

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

01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
sLogFile = "D:\Log.txt" 
03.
Const sCrit1 = "--------" 
04.
Const sCrit2 = ", Archiv " 
05.
 
06.
'Um die Länge der Suchkriterien nicht bei jedem Schleifendurchlauf 
07.
'erneut ermitteln zu müssen, diese gleich hier speichern: 
08.
iLenCrit1 = Len(sCrit1) 
09.
iLenCrit2 = Len(sCrit2) 
10.
 
11.
sResult = "" 
12.
Set oLogFile = fso.OpenTextFile(sLogFile, 1) 
13.
Do Until oLogFile.AtEndOfStream 
14.
	sLine = oLogFile.ReadLine 
15.
	If Left(sLine, iLenCrit1) = sCrit1 Then 'Kennung am Zeilenanfang prüfen 
16.
		iPos = InStr(1, sLine, sCrit2, vbTextCompare) ' Position der 2. Kennung feststellen 
17.
		If iPos Then 'Wenn 2. Kennung gefunden, ... 
18.
			sFilePath = Mid(sLine, iPos + iLenCrit2) ' ... den dahinter befindlichen Dateipfad auslesen ... 
19.
			If fso.FileExists(sFilePath) Then '... und auf Existenz der Datei prüfen. 
20.
				sFileFound = "Datei gefunden:" 
21.
			Else 
22.
				sFileFound = "Nicht gefunden:" 
23.
			End If 
24.
			If sResult <> "" Then 
25.
				sResult = sResult & vbCrLF & sFileFound & vbTab & sFilePath 
26.
			Else 
27.
				sResult = sFileFound & vbTab & sFilePath 
28.
			End If 
29.
		End If 
30.
	End If 
31.
Loop 
32.
oLogFile.Close 
33.
WScript.Echo sResult
Grüße
bastla
Bitte warten ..
Mitglied: cbli
15.10.2007 um 19:39 Uhr
Hallo cbli!

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

01.
Set fso = 
02.
> CreateObject("Scripting.FileSystemObject") 
03.
> sLogFile = "D:\Log.txt" 
04.
> Const sCrit1 = "--------" 
05.
> Const sCrit2 = ", Archiv " 
06.
>  
07.
> 'Um die Länge der Suchkriterien 
08.
> nicht bei jedem Schleifendurchlauf 
09.
> 'erneut ermitteln zu müssen, diese 
10.
> gleich hier speichern: 
11.
> iLenCrit1 = Len(sCrit1) 
12.
> iLenCrit2 = Len(sCrit2) 
13.
>  
14.
> sResult = "" 
15.
> Set oLogFile = fso.OpenTextFile(sLogFile, 
16.
> 1) 
17.
> Do Until oLogFile.AtEndOfStream 
18.
> 	sLine = oLogFile.ReadLine 
19.
> 	If Left(sLine, iLenCrit1) = sCrit1 Then 
20.
> 'Kennung am Zeilenanfang prüfen 
21.
> 		iPos = InStr(1, sLine, sCrit2, 
22.
> vbTextCompare) ' Position der 2. Kennung 
23.
> feststellen 
24.
> 		If iPos Then 'Wenn 2. Kennung 
25.
> gefunden, ... 
26.
> 			sFilePath = Mid(sLine, iPos + iLenCrit2) 
27.
> ' ... den dahinter befindlichen 
28.
> Dateipfad auslesen ... 
29.
> 			If fso.FileExists(sFilePath) Then 
30.
> '... und auf Existenz der Datei 
31.
> prüfen. 
32.
> 				sFileFound = "Datei 
33.
> gefunden:" 
34.
> 			Else 
35.
> 				sFileFound = "Nicht 
36.
> gefunden:" 
37.
> 			End If 
38.
> 			If sResult <> "" Then 
39.
> 				sResult = sResult & vbCrLF & 
40.
> sFileFound & vbTab & sFilePath 
41.
> 			Else 
42.
> 				sResult = sFileFound & vbTab & 
43.
> sFilePath 
44.
> 			End If 
45.
> 		End If 
46.
> 	End If 
47.
> Loop 
48.
> oLogFile.Close 
49.
> WScript.Echo sResult 
50.
> 


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:

01.
 
02.
strOrdner = "d:\exceltemp"   ' Quellordner 
03.
strExtension = "tar" 
04.
extensiontarsize ' Wert wird über eine Inputbox definiert 
05.
d:\tarfehler.log     ' Log Datei die die Fehler enthält 
06.
'strDateiname = ("d:\entpackt.txt")  ' Log Datei die alle entpackten Dateien auflistet,egal mit oder ohne Fehler     weiter unten schon definiert 
07.
 
08.
For Each objDatei In objOrdner.Files 
09.
   If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) Then 
10.
      if objDatei.size > extensiontarsize then 
11.
      wshshell.popup "Folgende Tar Datei wird entpackt "  & vbNewLine & vbNewLine & objDatei.name ,2,"Hinweis" 
12.
 
13.
WshShell.Run ("c:\programme\winrar\winrar.exe e -y -v -o+ -ilogd:\tarfehler.log " & strordner & "\"  & objdatei.name & " D:\entpackt\"),,true 
14.
 
15.
 
16.
' FileSystemObject objFs oeffnen 
17.
Set objFs= CreateObject("Scripting.FileSystemObject") 
18.
 
19.
' Dateiname festlegen 
20.
strDateiname = ("d:\entpackt.txt") 
21.
 
22.
' Einen Textstream (objTextStream) zur Textdatei oeffnen 
23.
Set objTextStream = objFs.OpenTextFile(strDateiname,8,True) 
24.
 
25.
' Inhalt fuer Datei in String strWriteString speichern: 
26.
strWriteString = objDatei.name 
27.
 
28.
' String in Datei schreiben: 
29.
objTextStream.WriteLine strWriteString 
30.
objTextStream.WriteBlankLines(1) 
31.
 
32.
' Objekte schliessen 
33.
objTextStream.Close 
34.
Set objTextStream = Nothing 
35.
Set objFs = Nothing 
36.
set file = nothing 
37.
set fso = nothing 
38.
 
Falls etwas fehlen sollte,reiche ich es gerne nach.
Ansonsten vielen Dank schon mal

Mit freundlichen Grüßen
Claus
Bitte warten ..
Mitglied: bastla
16.10.2007 um 14:08 Uhr
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
01.
strWriteString = objDatei.name
auf
01.
strWriteString = objDatei.Path
zu ändern.
Die mit
01.
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:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
sLog = "d:\entpackt.txt" 
03.
sErrorLog = "d:\tarfehler.log" 
04.
sList = "d:\entpackt_komplett.txt" 
05.
 
06.
Const sCrit1 = "--------" 
07.
Const sCrit2 = ", Archiv " 
08.
 
09.
'Um die Länge der Suchkriterien nicht bei jedem Schleifendurchlauf 
10.
'erneut ermitteln zu müssen, diese gleich hier speichern: 
11.
iLenCrit1 = Len(sCrit1) 
12.
iLenCrit2 = Len(sCrit2) 
13.
 
14.
Const adVarChar = 200 
15.
Const MaxCharacters = 255 
16.
Const adFldIsNullable = 32 
17.
 
18.
'Datenbank für Dateien und Fehlerhinweise erstellen ... 
19.
Set FileList = CreateObject("ADOR.Recordset") 
20.
FileList.Fields.Append "Path", adVarChar, MaxCharacters, adFldIsNullable 
21.
FileList.Fields.Append "Error", adVarChar, MaxCharacters, adFldIsNullable 
22.
FileList.Open 
23.
 
24.
' ... und mit dem Inhalt der Logdatei befüllen 
25.
Set oLog = fso.OpenTextFile(sLog, 1) 
26.
Do Until oLog.AtEndOfStream 
27.
	FileList.AddNew 
28.
	FileList("Path") = oLog.ReadLine 
29.
	FileList.Update 
30.
Loop 
31.
oLog.Close 
32.
 
33.
'Errorlog auslesen und Datenbank um Fehlerhinweise ergänzen 
34.
Set oErrorLog = fso.OpenTextFile(sErrorLog, 1) 
35.
Do Until oErrorLog.AtEndOfStream 
36.
	sLine = oErrorLog.ReadLine 
37.
	If Left(sLine, iLenCrit1) = sCrit1 Then 'Kennung am Zeilenanfang prüfen 
38.
		iPos = InStr(1, sLine, sCrit2, vbTextCompare) ' Position der 2. Kennung feststellen 
39.
		If iPos Then 'Wenn 2. Kennung gefunden, ... 
40.
			sFilePath = Mid(sLine, iPos + iLenCrit2) ' ... den dahinter befindlichen Dateipfad auslesen ... 
41.
			FileList.Filter = "Path = '" & sFilePath & "'" '... und danach in der Gesamtliste suchen. 
42.
			FileList.MoveFirst 
43.
			Do Until FileList.EOF 'Wenn die Datei gefunden wird, ... 
44.
				FileList("Error") = " ## Fehlerhaft entpackt! ##" '... einen Fehlertext hinzufügen. 
45.
				FileList.Update 
46.
				FileList.MoveNext 
47.
			Loop 
48.
			FileList.Filter = "" 
49.
		End If 
50.
	End If 
51.
Loop 
52.
oErrorLog.Close 
53.
 
54.
'Gesamtliste inkl Fehlerhinweisen in neue Datei ausgeben 
55.
Set oList = fso.OpenTextFile(sList, 2, True) 
56.
 
57.
FileList.Sort = "Path" 'Sortierung nach Dateipfad 
58.
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst): 
59.
'FileList.Sort = "Error" 
60.
FileList.MoveFirst 
61.
Do Until FileList.EOF 
62.
	oList.WriteLine FileList.Fields.Item("Path") & FileList.Fields.Item("Error") 
63.
	FileList.MoveNext 
64.
Loop 
65.
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
01.
sFilePath = Mid(sLine, iPos + iLenCrit2)
integrieren.

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

Grüße
bastla
Bitte warten ..
Mitglied: cbli
22.10.2007 um 13:40 Uhr
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

Mit freundlichen Grüßen
Claus
Bitte warten ..
Mitglied: bastla
22.10.2007 um 14:38 Uhr
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
01.
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
01.
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:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 'falls nicht ohnehin schon vorher erstellt 
02.
sOrdner = "D:\Temp" 
03.
sOldExt = ".txt" 'in Kleinbuchstaben angeben 
04.
sNewExt = ".doc" 
05.
For Each oFile In fso.GetFolder(sOrdner).Files 
06.
	sOldFile = oFile.Name 'Alter Name inkl Extension 
07.
	If LCase(Mid(sOldFile, InStrRev(sOldFile, "."))) = sOldExt Then 'Extension isolieren und überprüfen 
08.
		sNewFile = Left(sOldFile, InStrRev(sOldFile, ".") - 1) & sNewExt 'neuen Namen erstellen 
09.
		If fso.FileExists(sOrdner & "\" & sNewFile) Then fso.DeleteFile(sOrdner & "\" & sNewFile) 'vorhandene Zieldatei löschen 
10.
		oFile.Name = sNewFile 'neuen Namen zuweisen (= umbenennen) 
11.
	End If 
12.
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:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
sLog = "d:\entpackt.txt" 
03.
sErrorLog = "d:\tarfehler.log" 
04.
sList = "d:\entpackt_komplett.txt" 
05.
 
06.
Const sCrit1 = "--------" 
07.
Const sCrit2 = ", Archiv " 
08.
 
09.
'Um die Länge der Suchkriterien nicht bei jedem Schleifendurchlauf 
10.
'erneut ermitteln zu müssen, diese gleich hier speichern: 
11.
iLenCrit1 = Len(sCrit1) 
12.
iLenCrit2 = Len(sCrit2) 
13.
 
14.
Const adVarChar = 200 
15.
Const MaxCharacters = 255 
16.
Const adFldIsNullable = 32 
17.
 
18.
'Datenbank für Dateien und Fehlerhinweise erstellen ... 
19.
Set FileList = CreateObject("ADOR.Recordset") 
20.
FileList.Fields.Append "Path", adVarChar, MaxCharacters, adFldIsNullable 
21.
FileList.Fields.Append "Error", adVarChar, MaxCharacters, adFldIsNullable 
22.
FileList.Open 
23.
 
24.
' ... und mit dem Inhalt der Logdatei befüllen 
25.
Set oLog = fso.OpenTextFile(sLog, 1) 
26.
Do Until oLog.AtEndOfStream 
27.
	sLogLine = oLog.ReadLine 
28.
	If Trim(sLogLine) <> "" Then 
29.
		FileList.AddNew 
30.
		FileList("Path") = sLogLine 
31.
		FileList.Update 
32.
	End If 
33.
Loop 
34.
oLog.Close 
35.
 
36.
'Errorlog auslesen und Datenbank um Fehlerhinweise ergänzen 
37.
Set oErrorLog = fso.OpenTextFile(sErrorLog, 1) 
38.
Do Until oErrorLog.AtEndOfStream 
39.
	sLine = oErrorLog.ReadLine 
40.
	If Left(sLine, iLenCrit1) = sCrit1 Then 'Kennung am Zeilenanfang prüfen 
41.
		iPos = InStr(1, sLine, sCrit2, vbTextCompare) ' Position der 2. Kennung feststellen 
42.
		If iPos Then 'Wenn 2. Kennung gefunden, ... 
43.
			sFilePath = Mid(sLine, iPos + iLenCrit2) ' ... den dahinter befindlichen Dateipfad auslesen ... 
44.
			sFileName = Mid(sFilePath, InStrRev(sFilePath, "\") + 1) '... auf den Dateinamen reduzieren ... 
45.
			FileList.Filter = "Path = '" & sFileName & "'" '... und danach in der Gesamtliste suchen. 
46.
			FileList.MoveFirst 
47.
			Do Until FileList.EOF 'Wenn die Datei gefunden wird, ... 
48.
				FileList("Error") = " ## Fehlerhaft entpackt! ##" '... einen Fehlertext hinzufügen. 
49.
				FileList.Update 
50.
				FileList.MoveNext 
51.
			Loop 
52.
			FileList.Filter = "" 
53.
		End If 
54.
	End If 
55.
Loop 
56.
oErrorLog.Close 
57.
 
58.
'Gesamtliste inkl Fehlerhinweisen in neue Datei ausgeben 
59.
Set oList = fso.OpenTextFile(sList, 2, True) 
60.
 
61.
FileList.Sort = "Path" 'Sortierung nach Dateipfad 
62.
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst): 
63.
'FileList.Sort = "Error" 
64.
FileList.MoveFirst 
65.
Do Until FileList.EOF 
66.
	oList.WriteLine FileList.Fields.Item("Path") & FileList.Fields.Item("Error") & vbCrLF 
67.
	FileList.MoveNext 
68.
Loop 
69.
oList.Close
Grüße
bastla
Bitte warten ..
Mitglied: cbli
22.10.2007 um 16:36 Uhr
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

Mit freundlichen Grüßen
Claus
Bitte warten ..
Mitglied: bastla
23.10.2007 um 18:02 Uhr
Hallo cbli!

Füge als 5. Zeile
01.
sHTMLList = "d:\entpackt_komplett.html"
ein und ersetze den Teil am Ende (nach "oErrorLog.Close" ) durch
01.
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben 
02.
Set oList = fso.OpenTextFile(sList, 2, True) 
03.
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True) 
04.
 
05.
oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>" 
06.
oHTMLList.WriteLine "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>" 
07.
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>" 
08.
 
09.
FileList.Sort = "Path" 'Sortierung nach Dateipfad 
10.
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst): 
11.
'FileList.Sort = "Error" 
12.
FileList.MoveFirst 
13.
Do Until FileList.EOF 
14.
	sDateiName = FileList.Fields.Item("Path") 
15.
	sFehler = FileList.Fields.Item("Error") 
16.
	oList.WriteLine sDateiName & sFehler & vbCrLF 
17.
	If sFehler = "" Then 
18.
		sFehler = "&nbsp;" 
19.
	Else 
20.
		sFehler = "Fehler" 
21.
	End If 
22.
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "</TD><TD>" & sFehler & "</TD></TR>" 
23.
	FileList.MoveNext 
24.
Loop 
25.
 
26.
oHTMLList.WriteLine "</TABLE></BODY></HTML>" 
27.
oList.Close 
28.
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 ...

Grüße
bastla

P.S.: Auch diese Version ist nur sehr oberflächlich getestet.
Bitte warten ..
Mitglied: cbli
23.10.2007 um 19:52 Uhr
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

Mit freundlichen Grüßen
Claus
Bitte warten ..
Mitglied: bastla
23.10.2007 um 20:07 Uhr
Hallo cbli!

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

01.
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben 
02.
Set oList = fso.OpenTextFile(sList, 2, True) 
03.
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True) 
04.
 
05.
oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>" 
06.
oHTMLList.WriteLine "<BR><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>" 
07.
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>" 
08.
 
09.
FileList.Sort = "Path" 'Sortierung nach Dateipfad 
10.
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst): 
11.
'FileList.Sort = "Error" 
12.
FileList.MoveFirst 
13.
Do Until FileList.EOF 
14.
	sDateiName = FileList.Fields.Item("Path") 
15.
	sFehler = FileList.Fields.Item("Error") 
16.
	oList.WriteLine sDateiName & sFehler & vbCrLF 
17.
	If Trim(sFehler) <> "## Fehlerhaft entpackt! ##" Then 
18.
		sFehler = "&nbsp;" 
19.
	Else 
20.
		sFehler = "Fehler" 
21.
	End If 
22.
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "<BR>&nbsp;</TD><TD>" & sFehler & "<BR>&nbsp;</TD></TR>" 
23.
	FileList.MoveNext 
24.
Loop 
25.
 
26.
oHTMLList.WriteLine "</TABLE></BODY></HTML>" 
27.
oList.Close 
28.
oHTMLList.Close
Grüße
bastla
Bitte warten ..
Mitglied: cbli
24.10.2007 um 13:11 Uhr
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.


Mit freundlichen Grüßen
Claus
Bitte warten ..
Mitglied: bastla
24.10.2007 um 14:43 Uhr
Hallo cbli!

Tut mir leid, dass sich das so hinzieht ...
01.
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben 
02.
Set oList = fso.OpenTextFile(sList, 2, True) 
03.
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True) 
04.
 
05.
oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>" 
06.
oHTMLList.WriteLine "<BR><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>" 
07.
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>" 
08.
 
09.
FileList.Sort = "Path" 'Sortierung nach Dateipfad 
10.
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst): 
11.
'FileList.Sort = "Error" 
12.
FileList.MoveFirst 
13.
Do Until FileList.EOF 
14.
	sDateiName = FileList.Fields.Item("Path") 
15.
	sFehler = FileList.Fields.Item("Error") 
16.
	oList.WriteLine Left(sDateiName & Space(50), 50) & sFehler & vbCrLF 
17.
	If Trim(sFehler) = "## Fehlerhaft entpackt! ##" Then 
18.
		sFehler = "&nbsp;" 
19.
	Else 
20.
		sFehler = "Fehler" 
21.
	End If 
22.
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "<BR>&nbsp;</TD><TD>" & sFehler & "<BR>&nbsp;</TD></TR>" 
23.
	FileList.MoveNext 
24.
Loop 
25.
 
26.
oHTMLList.WriteLine "</TABLE></BODY></HTML>" 
27.
oList.Close 
28.
oHTMLList.Close
Grüße
bastla
Bitte warten ..
Mitglied: cbli
24.10.2007 um 17:11 Uhr
Tut mir leid, dass sich das so hinzieht ...



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
Bitte warten ..
Mitglied: bastla
24.10.2007 um 17:44 Uhr
Hallo cbli!

Letzter Versuch:
01.
'Gesamtliste inkl Fehlerhinweisen in Text- und HTML-Datei ausgeben 
02.
Set oList = fso.OpenTextFile(sList, 2, True) 
03.
Set oHTMLList = fso.OpenTextFile(sHTMLList, 2, True) 
04.
 
05.
oHTMLList.WriteLine "<HTML><HEAD><TITLE>Datei&uuml;bersicht entpackte Dateien</TITLE></HEAD><BODY>" 
06.
oHTMLList.WriteLine "<BR><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0>" 
07.
oHTMLList.WriteLine "<TR><TD WIDTH=450><b>Dateiname</b></TD><TD WIDTH=70><b>Fehler</b></TD></TR>" 
08.
 
09.
FileList.Sort = "Path" 'Sortierung nach Dateipfad 
10.
'oder nach fehlerhaften Dateien (werden am Ende der Liste zusammengefasst): 
11.
'FileList.Sort = "Error" 
12.
FileList.MoveFirst 
13.
Do Until FileList.EOF 
14.
	sDateiName = FileList.Fields.Item("Path") 
15.
	sFehler = FileList.Fields.Item("Error") 
16.
	oList.WriteLine Left(sDateiName & Space(50), 50) & sFehler & vbCrLF 
17.
	If IsNull(FileList.Fields.Item("Error")) Then 
18.
		sFehler = "&nbsp;" 
19.
	Else 
20.
		sFehler = "Fehler" 
21.
	End If 
22.
	oHTMLList.WriteLine "<TR><TD>" & sDateiName & "<BR>&nbsp;</TD><TD>" & sFehler & "<BR>&nbsp;</TD></TR>" 
23.
	FileList.MoveNext 
24.
Loop 
25.
 
26.
oHTMLList.WriteLine "</TABLE></BODY></HTML>" 
27.
oList.Close 
28.
oHTMLList.Close
Grüße
bastla
Bitte warten ..
Mitglied: cbli
24.10.2007 um 19:47 Uhr
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

Mit freundlichen Grüßen
Claus


01.
 
02.
dTypen = Array("xls", "doc") 
03.
For Each sTyp In dTypen 
04.
 
05.
    iAnz = 0 
06.
    lGr = 0 
07.
 
08.
    For Each bFile In fso.GetFolder(strordner).Files 
09.
        If LCase(fso.GetExtensionName(bFile.Path)) = sTyp then 
10.
 
11.
           iAnz = iAnz + 1 
12.
           lGr = lGr + bFile.Size 
13.
 
14.
end if 
15.
    next 
16.
 
Bitte warten ..
Mitglied: bastla
24.10.2007 um 20:11 Uhr
Hallo cbli!

Etwa so:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
strOrdner = "D:\Temp" 
03.
dTypen = Array("xls", "doc") 
04.
iAnz = 0 
05.
lGr = 0 
06.
For Each sTyp In dTypen 
07.
    For Each bFile In fso.GetFolder(strOrdner).Files 
08.
        If LCase(fso.GetExtensionName(bFile.Path)) = sTyp Then 
09.
           iAnz = iAnz + 1 
10.
           lGr = lGr + bFile.Size 
11.
	End If 
12.
    Next 
13.
Next 
14.
WScript.Echo CStr(iAnz) & " Dateien mit einer Gesamtgröße von " & CStr(lGr) & " Bytes."
Grüße
bastla
Bitte warten ..
Mitglied: cbli
26.10.2007 um 13:24 Uhr
Hallo Bastla !

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



Danke nochmals

Mit freundlichen Grüßen
Claus
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Netzwerkmanagement
gelöst Sophos UTM220 - Appliance CPU Auslastung LOG-Datei downloaden? (7)

Frage von 1410640014 zum Thema Netzwerkmanagement ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...