portableapes
Goto Top

Mehrere txt Dateien nach mehreren Variablen (Variablen-Pool) durchsuchen und inschließend die Zeilen mit der entsprechenden Variable in eine neue .txt Datein schreiben in VBScript

Hallo und Guten Morgen,

ich habe in einem bestimmten Ordner mehrere .log Files die ich nach bestimmten Fehlern durchsuchen darf. Daher möchte ich diese zeilenweise auslesen lassen und die komplette Zeile mit dem Argument in eine neue .txt Datei schreiben lassen.

Teilweise wurde dieses Thema in anderer Variante bereits behandelt. Ich habe eben nur das Problem, dass ich mehrere Variablen habe: Fehler, Problem, abgebrochen, etc...

Wie bekomme ich das unter einen Hut ?

Danke mal im Vorraus

Content-Key: 108885

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

Printed on: April 26, 2024 at 22:04 o'clock

Member: bastla
bastla Feb 13, 2009 at 11:09:47 (UTC)
Goto Top
Hallo PortableApes und willkommen im Forum!

Für diese Anforderung würde ich eher Batch als VBS verwenden - das könnte (ungetestet) so aussehen:
@echo off & setlocal
set "Ordner=D:\Deine Logs"  
set "Typ=log"  
set "Liste=D:\Fehlerliste.txt"  
set "Erg=D:\Errors.txt"  

if exist "%Erg%" del "%Erg%"  
for %%i in ("%Ordner%\*.%Typ%") do >>"%Erg%" findstr /i /g:"%Liste%" "%%i"  
Die Datei "Fehlerliste.txt" müsste einfach je Zeile einen Suchbegriff beinhalten, also:
Fehler
Problem
abgebrochen
etc
Grüße
bastla
Member: PortableApes
PortableApes Feb 13, 2009 at 16:00:39 (UTC)
Goto Top
Danke ersteinmal bastla.
Leider habe ich keine Wahl. Ist eine Scripterweiterung in VBS und der Urheber des alten Scripts lässt mich daran zerbrechen...
Habe mal die case Fuunktion in´s Auge gefasst.

Hast du mir dazu evtl. ein Bsp. ?
Member: bastla
bastla Feb 13, 2009 at 16:51:50 (UTC)
Goto Top
Hallo PortableApes!

Dann etwa so:
InDir = "D:\Deine Logs"  
InExt = "log" 'Dateityp in Kleinbuchstaben  
OutFile = "D:\Errors.txt"  
ErrorMessages = Array("Fehler", "Problem", "abgebrochen", "etc") ' Liste der Fehlermeldungen  

Set fso = CreateObject("Scripting.FileSystemObject")  

Set I = fso.GetFolder(InDir)
Set E = fso.CreateTextFile(OutFile, True) 'Ausgabedatei erstellen (ev bestehende Datei überschreiben)  

For Each File In I.Files 'Alle Dateien des Log-Ordners durchgehen ...  
    If LCase(fso.GetExtensionName(File)) = InExt Then ' ... und wenn vom vorgegebenen Typ ...  
        T = Split(File.OpenAsTextStream.ReadAll, vbCrLF) ' ... den Dateiinhalt zeilenweise in ein Array einlesen  
        U = Ubound(T)
        For i = 0 To U ' Alle Zeilen des Textes durchgehen ...  
            For Each ErrMsg In ErrorMessages ' ... und jeweils mit allen Fehlermeldungen vergleichen  
                If InStr(1, T(i), ErrMsg, vbTextCompare) > 0 Then ' Wenn eine Fehlermeldung in der Zeile enthalten ist ...  
                    E.WriteLine T(i) ' ... Zeile in die Ausgabedatei schreiben und ....  
                    Exit For '.... Überprüfung beenden (Zeile erledigt).  
                End If
            Next
        Next
    End If
Next
E.Close
Errorhandling kannst Du sicher selbst ergänzen (etwa Überprüfung, ob der Log-Ordner - siehe Zeile 8 - vorhanden ist, etc) ...

Grüße
bastla
Member: PortableApes
PortableApes Feb 13, 2009 at 18:04:10 (UTC)
Goto Top
Danke Dir bastla werde mich ausgiebig damit beschäftigen ist ja Wochenende. ;)
Hab auch schon ein 300 Zeilen Script.


Hurra es wird Frühling ! Jetzt gibt wieder LAN Parties im Freien.
Member: PortableApes
PortableApes Feb 16, 2009 at 07:25:15 (UTC)
Goto Top
Danke Bastla,

ein wenig Anpassung und es hat funktioniert.
Muss jetzt nur noch feineinstellungen vornehmen.