0cool
Goto Top

VB Script Robocopy.log auslesen und bestimmte zeilen in eine andere Textdatei schreiben

Hey Leute,

nach mehreren Tagen suchen im Netz, wende ich mich an euch.

Ich muss mit VB Script aus einer Log Datei, jeder Zeile in der das Wort Fehler vorkommt, an eine bestehende Textdatei anhängen. Wie bekomme ich das hin?

Informationen:
- Es ist nicht bekannt in welchen Zeile das Wort Fehler ist
- Auch ist es nicht bekannt wie oft das Wort Fehler in dem Log vorkommt

Also soll immer der gesammte Log Zeile für Zeile durchsucht werden.

Leider habe ich noch kein vernüftigen Ansatzpunkt für dieses Vorhaben.

Danke für eure Hilfe!

Gruß

0cool

Content-ID: 155913

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

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

60730
60730 28.11.2010 um 17:45:33 Uhr
Goto Top
moin,

vbs würde uch da nicht nehmen, außer es handelt sich um riesige logfiles.

set "input"=="c:\test\logfile.txt"  
set "output"=="c:\test\errorlogfile.txt"  
findstr /i "fehler" %input% && goto log ||goto end  
:log
echo ___________>>%output%
echo %date%>>%output%
echo ___________>>%output%
findstr /i "fehler" %input%>>%output%  
echo bmail oder blat?

:end
notepad %output%

Gruß


edit achso - für Robocopy?...
dann zumindestens ein Datum ins neue Log schreiben...
0cool
0cool 28.11.2010 um 17:55:48 Uhr
Goto Top
Hey,

erst mal danke für deine Antwort.

Leider brauche ich VB Script, da das auslesen und schreiben nur eine function von einem vb backup script ist. der rest des Scriptes hab ich hinbekommen, es happert nur noch an dieser einen Geschichte.


Gruß

0cool
bastla
bastla 28.11.2010 um 18:30:18 Uhr
Goto Top
Hallo 0cool!

Gänzlich ungetestet etwa so:
Ein = "D:\Dein Log.txt"  
Aus = "D:\Deine Textdatei.txt"  
Suche = "Fehler"  

Set fso = CreateObject("Scripting.FileSystemObject")  
For Each Zeile In Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf)
    If InStr(Zeile, Suche) > 0 Then Ausgabe = Ausgabe & vbCrLf & Zeile
Next
fso.OpenTextFile(Aus, 8, True).Write Ausgabe
Grüße
bastla
[Edit] Code "entslangt" face-wink [/Edit]
0cool
0cool 28.11.2010 um 19:36:10 Uhr
Goto Top
Hey bastla,

vielen dank ich werds morgen austesten.


Gruß

Thorsten
0cool
0cool 29.11.2010 um 11:04:08 Uhr
Goto Top
Hey bastla,

ich hab das dein Script jetzt getestet, leider schreibt es den gesamten Text der log.txt in die Datei Textdatei.txt, nicht nur die Zeilen in denen das Wort Fehler auftritt.

Kannst du mir weiterhelfen?

Gruß

0cool
Biber
Biber 29.11.2010 um 13:57:16 Uhr
Goto Top
Moin 0cool,

würde es etwas ändern, wenn du folgende Slangausdrücke durch eine variierte Schreibweise ersetzt?

a) statt "Set fso = CreateObejct" in Zeile 05 mal probieren "Set fso = CreateObject..."
b) statt dem Split-Trenner vbCrCLf in Zeile 06 mal antesten mit vbCrLf

Is' jezz' nur so 'ne Idee...

Grüße
Biber
bastla
bastla 29.11.2010 um 14:14:13 Uhr
Goto Top
@Biber
THX face-smile - ich korrigier's dann auch mal oben ...

BTW: So schaut (hoffentlich nicht allzu oft) "gänzlich ungetestet" aus ...

Grüße
bastla
0cool
0cool 30.11.2010 um 11:00:31 Uhr
Goto Top
Hey Leute,

vielen dank!

Das Script funktioniert auch als seperates Script. Wenn ich es zu meinen Script hinzufüge, liest er zwar die Datei robocopy.log aus und schreib die Zeilen in denen das Wort Fehler vorkommt in eine zweite Datei, doch leider wird die zweiter Datei in der Kodierung UCS-2 Little Endian gespeichert.

Wenn ich die zweite Datei aufmache, dann seh ich nur Schriftzeichen (Chinesich usw.).
Wenn ich die zweite Datei mit Word öffne, dann kann ich die Kodierung in ANSI ändern, damit ist die Datei wieder lesbar.

Kann ich in dem Script bestimmen mit welcher Kodierung die zweite Datei abgespeichert wird?

Die zweite Datei ist auch eine .log Datei.
bastla
bastla 30.11.2010 um 12:07:04 Uhr
Goto Top
Hallo 0cool!

Interessantes Phänomen ... face-wink

Versuch es mit folgender Zeile 9:
fso.OpenTextFile(Aus, 8, True, False).Write Ausgabe
Grüße
bastla
0cool
0cool 30.11.2010 um 14:43:52 Uhr
Goto Top
Danke bastla, aber ich habe es jetzt anders gelöst.

ich habe die error.log datei über ein objekt geladen.

set objstream = objfs.CreateObject ("Pfad\error.log", ForAppending, true)  

Dieses Objekt lade ich jetzt nachdem die Fehler in die error.log geschrieben wurden und hänge dann noch den Rückgabewert von Robocopy an die Datei error.log an.

Damit funktioniert es.

Vielen Dank nochmal für eure Hilfe.


Gruß

0cool