for /f "tokens=6,7 delims= " in VBS
Hallo,
Wie kann ich eine Log-Datei auslesen und überprüfen wie in diesen Batchschnipsel mit WSH ?
Wie kann ich eine Log-Datei auslesen und überprüfen wie in diesen Batchschnipsel mit WSH ?
...
:AUSWERTUNG
for /f "tokens=6,7 delims= " %%i in ('type F:\log.txt^|find "Dirs"') do set /a "cntMismatch+=%%i, cntFailed+=%%j"
if not %cntMismatch%==0 goto FEHLER
if not %cntFailed%==0 goto FEHLER
...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 47505
Url: https://administrator.de/contentid/47505
Ausgedruckt am: 23.11.2024 um 11:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Andynix!
Vorweg: Obwohl ich persönlich recht gerne VBScript verwende, würde ich gerade für diese Aufgabenstellung nicht unbedingt dazu raten.
Ausgehend von der Annahme, dass es sich bei "log.txt" um die Ausgabe von "Robocopy" handelt, könnte das so aussehen:
Anmerkung: Es wird nicht überprüft, ob die Log-Datei überhaupt existiert, der Auswertungsteil ließe sich natürlich eleganter schreiben und was die Aufbereitung / Ausgabe / Weiterverwendung des Ergebnisses anlangt, musst Du ohnehin Deine Vorstellungen umsetzen - solltest Du das wirklich per VBS lösen wollen ...
Grüße
bastla
Vorweg: Obwohl ich persönlich recht gerne VBScript verwende, würde ich gerade für diese Aufgabenstellung nicht unbedingt dazu raten.
Ausgehend von der Annahme, dass es sich bei "log.txt" um die Ausgabe von "Robocopy" handelt, könnte das so aussehen:
'CheckRobocopyLog.vbs
Const sLogFile = "F:\log.txt"
Const sMarker = " Dirs :" 'Kennzeichen am Zeilenanfang
Const sOK = "Sicherung erfolgreich."
sMarkLen = Len(sMarker)
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oLogFile = fso.OpenTextFile(sLogFile, 1)
Do While Not oLogFile.AtEndOfStream
sLine = oLogFile.ReadLine
If Left(sLine, sMarkLen) = sMarker Then
sValues = Trim(Mid(sLine, sMarkLen + 1)) 'hinter Kennzeichen befinden sich die Werte
Exit Do 'weitere Zeilen nicht mehr untersuchen
End If
Loop
oLogFile.Close
'Auswertung
If sValues <> "" Then
sMsg = sOK
iPos = Instr(sValues, " ")
If iPos > 1 Then
iTotal = CInt(Left(sValues, iPos - 1))
End If
sValues = Trim(Mid(sValues, iPos))
iPos = Instr(sValues, " ")
If iPos > 1 Then
iCopied = CInt(Left(sValues, iPos - 1))
End If
sValues = Trim(Mid(sValues, iPos))
iPos = Instr(sValues, " ")
If iPos > 1 Then
iSkipped = CInt(Left(sValues, iPos - 1))
End If
sValues = Trim(Mid(sValues, iPos))
iPos = Instr(sValues, " ")
If iPos > 1 Then
iMismatch = CInt(Left(sValues, iPos - 1))
End If
sValues = Trim(Mid(sValues, iPos))
iPos = Instr(sValues, " ")
If iPos > 1 Then
iFailed = CInt(Left(sValues, iPos - 1))
End If
sValues = Trim(Mid(sValues, iPos))
iExtras = CInt(sValues)
'Aufbereitung Ergebnis
If iMismatch <> 0 Then
sMsg = "Mismatches:" & vbTab & iMismatch
End If
If iFailed <> 0 Then
If sMsg <> sOK Then
sMsg = sMsg & vbCrLF & "FAILED: " & vbTab & vbTab & iFailed
Else
sMsg = "FAILED: " & vbTab & iFailed
End If
End If
Else
sMsg = "Dirs-Daten nicht gefunden!"
End If
WScript.Echo sMsg
If sMsg <> sOK Then WScript.Quit(1) 'Errorlevel setzen
Grüße
bastla
Hallo Andynix!
Zu Erstens: "Heftig" ist eigentlich noch untertrieben ...
Zu Zweitens: "Files :" eignet sich nicht als Kennzeichen, da es mehr als einmal im Log am Anfang einer Zeile steht - Du müsstest also den String eindeutig machen (zB " Files : ", also noch mindestens 2 Leerzeichen nach dem ":").
Grüße
bastla
Zu Erstens: "Heftig" ist eigentlich noch untertrieben ...
Zu Zweitens: "Files :" eignet sich nicht als Kennzeichen, da es mehr als einmal im Log am Anfang einer Zeile steht - Du müsstest also den String eindeutig machen (zB " Files : ", also noch mindestens 2 Leerzeichen nach dem ":").
Grüße
bastla