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

Robocopy Logfile auswerten

Frage Entwicklung Batch & Shell

Mitglied: 43497

43497 (Level 1)

14.02.2007, aktualisiert 18.10.2012, 16054 Aufrufe, 20 Kommentare

Hallo zusammen! Bin recht neu hier und hoffe, dass ihr mir helfen könnt.

Es geht um Robocopy. Dies kopiert Daten von einer NAS-Station auf eine mobile NAS-Einheit und erstellt dann ein Logfile auf der mobilen Einheit.
Ich denke dass einige hier wissen wie das Logfile von Robocopy aussieht, für den unerfahrenen Anweder nicht gerade Benutzerfreundlich...

Nun habe ich in die Robocopy-Batchdatei Zeilen eingefügt, dass auf dem Desktop eine Kurzform des Logfiles erstellt wird.
Gäbe es die Möglichkeit das original Logfile danach zu durchsuchen (vorallem nur die letzten X Zeilen, da das Logbuch angehängt und nicht überschrieben wird), dass bei FAILED 0 steht ?? Dadurch dass es so tabellenförmig angeordnet ist komme ich leider nicht weiter...

Wenn FAILED = 0, ist es dann möglich ein Popup zu erstellen mit z.B. dem Text "Kopiervorgang erfolgreich" bzw. wenn FAILED >=1 "Kopiervorgang nicht erfolgreich" ??

Danke schonmal für die Hilfe!

Mit freundlichen Grüßen
Dominik Fischer
Mitglied: bastla
14.02.2007, aktualisiert 18.10.2012
Hallo DFischer und willkommen im Forum!

Das Thema hatten wir vor einiger Zeit (siehe hier) - vielleicht hilft Dir das ...

Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 10:18 Uhr
Hallo und danke für die Hilfe!

Hab jetzt den Code
01.
'CheckRobocopyLog.vbs 
02.
Const sLogFile = "D:\CD\Extern1\RoboCopy.log" 
03.
Const sMarker = "     Dirs :" 'Kennzeichen am Zeilenanfang 
04.
Const sOK = "Sicherung erfolgreich." 
05.
sMarkLen = Len(sMarker) 
06.
Set fso = WScript.CreateObject("Scripting.FileSystemObject") 
07.
Set oLogFile = fso.OpenTextFile(sLogFile, 1) 
08.
Do While Not oLogFile.AtEndOfStream 
09.
    sLine = oLogFile.ReadLine 
10.
    If Left(sLine, sMarkLen) = sMarker Then 
11.
        sValues = Trim(Mid(sLine, sMarkLen + 1)) 'hinter Kennzeichen befinden sich die Werte 
12.
        Exit Do 'weitere Zeilen nicht mehr untersuchen 
13.
    End If 
14.
Loop 
15.
oLogFile.Close 
16.
 
17.
'Auswertung 
18.
If sValues <> "" Then 
19.
    sMsg = sOK 
20.
    iPos = Instr(sValues, " ") 
21.
    If iPos > 1 Then 
22.
        iTotal = CInt(Left(sValues, iPos - 1)) 
23.
    End If 
24.
    sValues = Trim(Mid(sValues, iPos)) 
25.
    iPos = Instr(sValues, " ") 
26.
    If iPos > 1 Then 
27.
        iCopied = CInt(Left(sValues, iPos - 1)) 
28.
    End If 
29.
    sValues = Trim(Mid(sValues, iPos)) 
30.
    iPos = Instr(sValues, " ") 
31.
    If iPos > 1 Then 
32.
        iSkipped = CInt(Left(sValues, iPos - 1)) 
33.
    End If 
34.
    sValues = Trim(Mid(sValues, iPos)) 
35.
    iPos = Instr(sValues, " ") 
36.
    If iPos > 1 Then 
37.
        iMismatch = CInt(Left(sValues, iPos - 1)) 
38.
    End If 
39.
    sValues = Trim(Mid(sValues, iPos)) 
40.
    iPos = Instr(sValues, " ") 
41.
    If iPos > 1 Then 
42.
        iFailed = CInt(Left(sValues, iPos - 1)) 
43.
    End If 
44.
    sValues = Trim(Mid(sValues, iPos)) 
45.
    iExtras = CInt(sValues) 
46.
 
47.
    'Aufbereitung Ergebnis 
48.
    If iMismatch <> 0 Then 
49.
        sMsg = "Mismatches:"  & vbTab & iMismatch 
50.
    End If 
51.
    If iFailed <> 0 Then 
52.
        If sMsg <> sOK Then 
53.
            sMsg = sMsg & vbCrLF & "Sicherung FAILED: " & vbTab & vbTab & iFailed 
54.
        Else 
55.
            sMsg = "Sicherung FAILED: " & vbTab & iFailed 
56.
        End If 
57.
    End If 
58.
Else 
59.
    sMsg = "Dirs-Daten nicht gefunden!" 
60.
End If 
61.
 
62.
WScript.Echo sMsg 
63.
If sMsg <> sOK Then WScript.Quit(1) 'Errorlevel setzen
benutzt. Leider überprüft der ja immer die ganze Logdatei von Robocopy
Ist es möglich noch einzustellen, dass er immer die letzten X Zeilen überprüft weil der Text immer angehängt wird? Kenne mich in VBS leider nicht wirklich aus...

Mit freundlichen Grüßen
Dominik Fischer
Bitte warten ..
Mitglied: bastla
14.02.2007 um 10:45 Uhr
Hallo DFischer!

Verwendest Du die Option "/LOG+:"? Als Workaround könntest Du mit "/LOG:" jeweils ein neues Log erstellen und bei Bedarf mit "type NeuesLog.txt>>AltesLog.txt" anfügen lassen - überprüfen müsstest Du dann immer nur das neue Log.

Um das Durchlesen aller Zeilen des (neuen) Logs kommst Du aber nicht herum, da ja die Zusammenfassungszeilen durch einen "Mustervergleich" gefunden werden müssen.

Du könntest Dich aber auf die Suche nach einem Pendant zum Unix-Tool "tail" machen, um nur die letzten x Zeilen eines Files zu erhalten und so den Ablauf beschleunigen zu können.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
14.02.2007 um 11:26 Uhr
Hallo DFischer!

Wie schon an anderer Stelle angemerkt, wäre die Aufgabenstellung ohnehin besser per Batch zu lösen - das könnte dann so aussehen:
01.
@echo off & setlocal 
02.
set /a Failed=0 
03.
for /f "tokens=7" %%i in ('findstr /C:"Files :" RoboLog.txt') do set /a Failed+=%%i 
04.
If %Failed%==0 goto :eof 
05.
echo %Failed% Fehler gefunden!
Falls Du auch die "Dirs :"-Zeile mit überprüfen wolltest, könntest Du eine Datei "SuchStrings.txt" mit folgendem Inhalt erstellen:
01.
Dirs : 
02.
Files :
und die "for"-Zeile entsprechend abändern:
01.
for /f "tokens=7" %%i in ('findstr /G:SuchStrings.txt RoboLog.txt') do set /a Failed+=%%i
Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 12:05 Uhr
Kann es sein dass im o.g. Code das Logfile auf die Zeile "Dirs" überprüft wird?

Wäre doch viel sinnvoller die Zeile "Files" zu überprüfen um zu sehen ob wirklich Daten kopiert wurden oder nicht.
Momentan sagt er nämlich auch "Sicherung OK" wenn gar keine Dateien kopiert wurden...
Bitte warten ..
Mitglied: 43497
14.02.2007 um 13:33 Uhr
Kann es sein dass im o.g. Code das Logfile
auf die Zeile "Dirs"
überprüft wird?

Wäre doch viel sinnvoller die Zeile
"Files" zu überprüfen um
zu sehen ob wirklich Daten kopiert wurden
oder nicht.
Momentan sagt er nämlich auch
"Sicherung OK" wenn gar keine
Dateien kopiert wurden...

Im übrigen wird eine Batch-Datei im Anhang an einen Backup-Job ausgeführt, doch leider versteckt. Der PC piept zwar wenn das VBS-Message Fenster erscheint, doch man sieht nichts. Gibt es eine Möglichkeit das ganze in den Vordergrund zu schieben?
Bitte warten ..
Mitglied: bastla
14.02.2007 um 13:35 Uhr
Hallo DFischer!

... auf die Zeile "Dirs" überprüft wird?
Ja. Ändere die entsprechende Zeile auf
01.
Const sMarker = "    Files :   "
und achte auf die Anzahl an Leerstellen - auch nach dem Doppelpunkt müssen es mindestens 2 sein, um die Zeile exakt zu kennzeichnen.

Darf ich trotzdem nochmal dezent auf die Batch-Variante hinweisen?

Grüße
bastla
Bitte warten ..
Mitglied: bastla
14.02.2007 um 13:45 Uhr
Im übrigen wird eine Batch-Datei im Anhang an einen Backup-Job ausgeführt, doch leider versteckt. Der PC piept zwar wenn das VBS-Message Fenster erscheint, doch man sieht nichts. Gibt es eine Möglichkeit das ganze in den Vordergrund zu schieben?
Wie wurde denn die Ausführung "versteckt"?

Ganz nebenbei sei erwähnt, dass durch einen Aufruf per
01.
CScript //nologo CheckRobocopyLog.vbs
nicht nur die Ausgabe in der Konsole erfolgt, sondern auch der Errorlevel abgefragt werden kann - Errorlevel 1 für "Fehler", Errorlevel 0 für "Alles OK". Damit könnte in weiterer Folge zB über blat der Versand einer Mail ausgelöst werden.

Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 13:55 Uhr
Also, wenn ich "Dirs" einfach ein "Files" ändere und auf die entsprechenden Leerzeichen achte sagt er mir "Dirs-Daten nicht gefunden", siehe unten im Code.
Besteht das Problem vielleicht darin, dass die kopierten Dateien in der Zeile nicht den ersten sondern den zweiten Wert haben?

Und wodurch der Aufruf versteckt wurde...Ich denke mal durch Veritas Backup Exec, da kann man an einen Job einen Befehl hängen, und dort wird meine Batch-Datei ausgeführt, allerdíngs im Hintergrund und nicht sichtbar.

Würde es helfen wenn ich den genauen Vorgang aufschreiben würde? Komme mit deiner Batch-Variante nicht ganz klar.

Danke nochmal für die Antworten!

Gruß
Bitte warten ..
Mitglied: bastla
14.02.2007 um 14:17 Uhr
Hallo DFischer!

"Dirs-Daten nicht gefunden"
Sollte besser (allgemeiner) formuliert sein und bedeutet: "Passende Datenzeile lt Vorgabe in sMarker nicht gefunden." - daher vielleicht nochmals den Anfang der "Files :"-Zeile kopieren und bei "sMarker=" zwischen die Anführungszeichen stellen (Leerzeichen am Ende nicht vergessen) - oder, vielleicht noch besser, poste einmal die relevanten Zeilen Deines Beispiellogs.

Komme mit deiner Batch-Variante nicht ganz klar.
Wenn der Batch ohne Fehlermeldung durchläuft, sollte das eigentlich bedeuten, dass in der Spalte "Failed" der Zeile "Files :" der Wert 0 steht. Ändere den entsprechenden Eintrag in der Log-Datei, und es müsste die Fehleranzahl gemeldet werden. Auch hier wäre eine mögliche (weitere) Vorgangsweise das Versenden einer Mail (Stichwort "blat").

Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 14:31 Uhr
Hallo DFischer!

> "Dirs-Daten nicht gefunden"
Sollte besser (allgemeiner) formuliert sein
und bedeutet: "Passende Datenzeile lt
Vorgabe in sMarker nicht gefunden." -
daher vielleicht nochmals den Anfang der
"Files :"-Zeile kopieren und bei
"sMarker=" zwischen die
Anführungszeichen stellen (Leerzeichen
am Ende nicht vergessen) - oder, vielleicht
noch besser, poste einmal die relevanten
Zeilen Deines Beispiellogs.

Wenn ich den sMarker-Eintrag auf die Files-Zeile ändere sagt er immer noch dass die Datensicherung OK sei, vielleicht weil er auf die 3 zielt?

Die Zeilen sehen so aus:

Total/Copied/Skipped/Mismatch/Failed/Extras
Dirs: 1 0 1 0 0 0
Files: 3 0 3 0 0 2

Wie du siehst wurden keine Dateien kopiert, die Sicherung wird aber als erfolgreich anzegeigt.
> Komme mit deiner Batch-Variante nicht
ganz klar.
Wenn der Batch ohne Fehlermeldung
durchläuft, sollte das eigentlich
bedeuten, dass in der Spalte
"Failed" der Zeile "Files
:" der Wert 0 steht. Ändere den
entsprechenden Eintrag in der Log-Datei, und
es müsste die Fehleranzahl gemeldet
werden. Auch hier wäre eine
mögliche (weitere) Vorgangsweise das
Versenden einer Mail (Stichwort
"blat").

Wenn die Sicherung durchgelaufen ist soll der Robocopy-Batch-Befehl gestartet werden. Am Ende des Kopierens sollte ein Fenster erscheinen in dem steht ob das Kopieren OK oder nicht OK war.

Gruß und danke für die Geduld ;)

PS: Bei Bedarf kann ich die Batch-Datei und das VBScript mal hochladen...
Bitte warten ..
Mitglied: bastla
14.02.2007 um 14:41 Uhr
Hallo DFischer!

Total/Copied/Skipped/Mismatch/Failed/Extras
Dirs: 1 0 1 0 0 0
Files: 3 0 3 0 0 2

Da das Programm die Anzahl unter "Failed" überprüft, und diese in beiden Fällen 0 ist, wird kein Fehler festgestellt - der Batch geht genauso vor. Wie sollte denn für Dich die Überprüfung aussehen?
Leicht veränderteter Batch, um auch ein "OK" anzuzeigen (aber immer noch auf Basis "Failed"=0):
01.
@echo off & setlocal 
02.
set /a Failed=0 
03.
for /f "tokens=7" %%i in ('findstr /C:"Files :" RoboLog.txt') do set /a Failed+=%%i 
04.
If %Failed%==0 goto :OK 
05.
echo %Failed% Fehler gefunden! 
06.
goto :eof 
07.
:OK 
08.
echo Sicherung OK (unter "Failed" wurden 0 Dateien vermerkt). 
09.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 14:50 Uhr
Hallo DFischer!

>
Total/Copied/Skipped/Mismatch/Failed/Extras
> Dirs: 1 0 1 0 0 0
> Files: 3 0 3 0 0 2

Da das Programm die Anzahl unter
"Failed" überprüft, und
diese in beiden Fällen 0 ist, wird kein
Fehler festgestellt - der Batch geht genauso
vor. Wie sollte denn für Dich die
Überprüfung aussehen?
Überprüft werden sollte, ob die Anzahl unter "Copied" größer 0 ist.

----
Leicht veränderteter Batch, um auch ein
"OK" anzuzeigen (aber immer noch
auf Basis "Failed"=0):
01.
@echo off & setlocal 
02.
> set /a Failed=0 
03.
> for /f "tokens=7" %%i in ('findstr 
04.
> /C:"Files :" RoboLog.txt') do set 
05.
> /a Failed+=%%i 
06.
> If %Failed%==0 goto :OK 
07.
> echo %Failed% Fehler gefunden! 
08.
> goto :eof 
09.
> :OK 
10.
> echo Sicherung OK (unter "Failed" 
11.
> wurden 0 Dateien vermerkt). 
12.
> goto :eof 
13.
> 

Grüße
Dominik
Bitte warten ..
Mitglied: bastla
14.02.2007 um 15:06 Uhr
Hallo DFischer!

Na dann:
01.
@echo off & setlocal 
02.
set /a Copied=0 
03.
for /f "tokens=4" %%i in ('findstr /C:"Files :" RoboLog.txt') do set /a Copied+=%%i 
04.
If %Copied%==0 goto :Fehler 
05.
echo %Copied% Dateien kopiert. 
06.
goto :eof 
07.
:Fehler 
08.
echo Fehler! Es wurden keine Dateien kopiert. Bitte Log überprüfen! 
09.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 15:13 Uhr
Also meine Batch-Datei sieht momentan so aus:

01.
del "C:\Dokumente und Einstellungen\All Users\Desktop\Logstatus.txt" 
02.
 
03.
echo Backup Job started:  %DATE% %TIME% >>"C:\Dokumente und Einstellungen\All Users\Desktop\Logstatus.txt" 
04.
 
05.
C:\Programme\CopyRiteXP\robocopy.exe "\\Nas\Datenkreis1" "\\Extern1\Sicherung1" /E /ZB /COPY:DAT /XF Changer.cfg Folder.cfg /TS /FP  /R:0 /W:0 /LOG:"\\Extern1\Sicherung1\Logbuch_Einzel.log" /TEE /NP 
06.
 
07.
echo Backup Job ended:  %DATE% %TIME% >>"C:\Dokumente und Einstellungen\All Users\Desktop\Logstatus.txt" 
08.
 
09.
type "\\Extern1\Sicherung1\Logbuch_Einzel.log" >> "\\Extern1\Sicherung1\Logbuch_Gesamt.log" 
10.
 
11.
@echo off & setlocal 
12.
set /a Copied=0 
13.
for /f "tokens=4" %%i in ('findstr /C:"Files :" \\Extern1\Sicherung1\Logbuch_Einzel.log') do set /a Copied+=%%i 
14.
If %Copied%==0 goto :Fehler 
15.
echo %Copied% Dateien kopiert. 
16.
goto :eof 
17.
:Fehler 
18.
echo Fehler! Es wurden keine Dateien kopiert. Bitte Log überprüfen! 
19.
goto :eof
Leider kommt kein Popup o.Ä. am Ende. Ist der Code so überhaupt richtig geschrieben?
Bitte warten ..
Mitglied: bastla
14.02.2007 um 15:27 Uhr
Hallo DFischer!

Um mehr zu sehen, kannst Du "@echo off & " entfernen und nur "setlocal" belassen und vor jedes "goto :eof" ein "pause" setzen - Popup gibt's zwar dann auch nicht, aber die Meldung kannst Du auch lesen, wenn Du die Batchdatei zB per Doppelklick gestartet hast.

BTW: Die erste Zeile ist Luxus, wenn Du die Umleitung in der zweiten Zeile nur mit einem ">" schreibst - damit wird die ev existierende "Logstatus.txt" durch den neuen Eintrag überschrieben.

Die Meldungen der Batchdatei kannst Du dann (wenn es denn so klappt, wie Du es Dir vorstellst) natürlich auch in die "Logstatus.txt" schicken.

Eigentlich sehe ich bei dem Ganzen derzeit nichts unangenehm Auffallendes - sollte jetzt eigentlich funktionieren.

Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 15:36 Uhr
Ah, wunderbar, es funktioniert!

Gibts vielleicht noch eine Option ähnlich "Clearscreen"? D.h. dass am Ende nur klar da steht dass das Kopieren in Ordnung bzw. nicht in Ordnung war?

Gruß
Dominik
Bitte warten ..
Mitglied: bastla
14.02.2007 um 15:42 Uhr
Hallo DFischer!

Nicht nur "ähnlich Clearscreen":
01.
cls
steht genau dafür - einfach vor der "If"-Zeile in eine eigene Zeile schreiben.

Grüße
bastla
Bitte warten ..
Mitglied: 43497
14.02.2007 um 15:51 Uhr
Ich wusste doch dass es da was gab... ;)

Meine Probleme sind soweit gelöst, dass die CMD nicht im Vordergrund ausgeführt ist ist erst mal egal, muss man es halt per Hand anstarten.

Oder liegt das vielleicht daran dass es eine *.cmd und keine *.bat Datei ist?

Gruß
Bitte warten ..
Mitglied: bastla
14.02.2007 um 16:01 Uhr
Hallo DFischer!

Dieses "Hintergründige" hat sicher nichts mit dem Dateityp ".cmd" zu tun, sondern wohl mit der Art des Aufrufs durch "Backup Exec" - habe aber leider keinen Tipp für Dich.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Server
gelöst Robocopy RECYCLE.BIN (21)

Frage von swissbull zum Thema Server ...

Batch & Shell
gelöst CSV Dateien auswerten mit Script (8)

Frage von Crank69 zum Thema Batch & Shell ...

Windows Tools
Robocopy . Datei im Zielverzeichnis nur überschreiben, wenn neuer (7)

Frage von gnrmarcel zum Thema Windows Tools ...

Batch & Shell
gelöst Move mit Robocopy (2)

Frage von 0xC0FFE zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

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

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...