Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Log Dateien automatisch auswerten



  • Please log in to reply
38 replies to this topic
nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Oh sorry mein Fehler.

Du musst die Parameter bei

InStr("FFSyncVar1",A_LoopReadLine)

Vertauschen.


Visit the new forum ahkscript.org.

http://ahkscript.org


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Also so:
 

If (InStr(A_LoopReadLine, "FFSyncVar1")||InStr(A_LoopReadLine, "FFSyncVar2")||InStr(A_LoopReadLine, "FFSyncVar3"))

Funktioniert leider auch nicht, jetzt wird immer Erfolg gemeldet, auch wenn der Text aus FFSyncVar1 vorhanden ist!



 



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Weil du nicht nach dem Inhalt von FFSyncVar1 suchst, sondern nach der Zeichenfolge "FFSyncVar1"


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo Seidenweber,

klingt logisch, vielen Dank ;-)

Allerdings gibt es ein viel gravierenderes Problem, wie ich soeben festgestellt habe.
Es funktioniert nur wenn die Meldung in der ersten Zeile steht, das tut sie aber nicht.
Eigentlich soll ja nur Zeile für Zeile gesucht werden, ob, gerne auch in der Mitte, eine der drei Variablen vorhanden ist.
Wäre es dann nicht logischer mit RegExMatch zu suchen?

Und falls ja, wie?



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011
✓  Best Answer

Ich glaube, Du denkst da zu kompliziert:

#NoEnv
; ------------ Variablen fuer den Logfilereader - immer an den Anfang eines Scriptes -----------------------------------
PfadzurLogdatei := "D:\zzzz_Batch_Logfiles\"
Ergebnis := ""
FFSyncVar1 := "Die folgenden Elemente haben ungelöste Konflikte und werden nicht synchronisiert werden"
FFSyncVar2 := "Synchronisation mit Fehlern abgeschlossen"
FFSyncVar3 := "Synchronisation mit Warnungen abgeschlossen"
; --------------------- Logfilereader ----------------------------------------------------------------------------------
Loop, %PfadzurLogdatei%*.log
{
   ; Gibt den Namen des Logfiles (nicht den Pfad) aus
   Ergebnis .= "`n`n----------------[" . A_LoopFileName . "]----------------"
   ; --------------------- automatische Auswertung des Logfiles --------------------------------------------------------
   Fehler := False ; Grundstellung Fehlerflag = False
   Loop, Read, %A_LoopFileFullPath%
   {
      If InStr(A_LoopReadLine, FFSyncVar1) Or InStr(A_LoopReadLine, FFSyncVar2) Or InStr(A_LoopReadLine, FFSyncVar3)
         Fehler := True
      ; Nur die ersten neun Zeilen prüfen; wenn das Fehlerflag gesetzt ist, ist ebenfalls Schluss
      If (A_Index > 9) Or (Fehler)
         Break
   }
   If (Fehler)
      Ergebnis .= "`nFehler bei der Synchronisation / Datensicherung!!!"
   Else
      Ergebnis .= "`nDie Synchronisation / Datensicherung war erfolgreich."
   ; ------------------- ENDE automatische Auswertung des Logfiles -----------------------------------------------------
}
; Ergebnis in die Textdatei Backup.txt schreiben und anzeigen
FileDelete, Backup.txt ; Alte Backup.txt Datei wird geloescht
FileAppend, %Ergebnis%, Backup.txt ; Schreibt die Infos der Logdateien in die Backup.txt
RunWait, Backup.txt ; Zeigt die geschriebene Datei auch gleich an...
; --------------------- ENDE Logfilereader -----------------------------------------------------------------------------

?


Prefer ahkscript.org for the time being.


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

@just me,

 

"so einfach" kann das Leben sein, Du hast Recht. Ich danke Dir. Schön das Du auch mal OR verwendet hast, ich habe schon an mir gezweifelt ob AND und OR überhaupt in autohotkey Verwendung finden.
Funktioniert perfekt, ich habe nur noch ein paar Formatierungen für mich geändert, zum Beispiel brauche ich den Inhalt der Dateien bis Zeile 11, aber es ist ein Traum...

So sieht das fertige Script nun aus:
 

#NoEnv
; ------------ Variablen fuer den Logfilereader - immer an den Anfang eines Scriptes -----------------------------------
PfadzurLogdatei := "Z:\zzzz_Batch_Logfiles\"
Ergebnis := ""
FFSyncVar1 := "Die folgenden Elemente haben ungelöste Konflikte und werden nicht synchronisiert werden"
FFSyncVar2 := "Synchronisation mit Fehlern abgeschlossen"
FFSyncVar3 := "Synchronisation mit Warnungen abgeschlossen"
FFSyncVar4 := "Synchronisation abgebrochen"
; ---------------------------------------------------------------------------------------------------


; --------------------- Logfilereader ----------------------------------------------------------------------------------
Loop, %PfadzurLogdatei%*.log
{
   ; Gibt den Namen des Logfiles (nicht den Pfad) aus
   Ergebnis .= "`n`n------------ [ - " A_LoopFileName " - ] ------------"
   ; --------------------- automatische Auswertung des Logfiles --------------------------------------------------------
   Fehler := False ; Grundstellung Fehlerflag = False
   Loop, Read, %A_LoopFileFullPath% ; Die Variable muss in %% eigebettet sein, andernfalls funktioniert es nicht
   {
      If InStr(A_LoopReadLine, FFSyncVar1) Or InStr(A_LoopReadLine, FFSyncVar2) Or InStr(A_LoopReadLine, FFSyncVar3) Or InStr(A_LoopReadLine, FFSyncVar4)
	  ; pruefe ob eine der oben genannten Variablen zutrifft, falls ja ist ein Fehler aufgetreten
         Fehler := True
		 If (A_Index > 11) Or (Fehler)
		 ; Nur die ersten 11 Zeilen pruefen; falls ein Fehler gefunden wird - setzte Fehler und gehe zur naechsten Datei
         Break
   }
   If (Fehler)
      Ergebnis .= "`n############################################################################################`n##################---Fehler bei der Synchronisation / Datensicherung!!!---##################`n############################################################################################"
   Else
      Ergebnis .= "`n >>>>>>>>>> Die Synchronisation / Datensicherung war erfolgreich. <<<<<<<<<< "
   ; ------------------- ENDE automatische Auswertung des Logfiles -----------------------------------------------------
}

; Den erhaltenen Inhalt der Variable "Ergebnis" in die Textdatei Backup.txt schreiben und anzeigen
FileDelete, %PfadzurLogdatei%Backup.txt ; Alte Backup.txt Datei wird geloescht
FileAppend, %Ergebnis%, %PfadzurLogdatei%Backup.txt ; Schreibt die Infos der Fehlerpruefung in die Backup.txt
RunWait, %PfadzurLogdatei%Backup.txt ; Zeigt die geschriebene Datei auch gleich an...
; --------------------- ENDE Logfilereader -----------------------------------------------------------------------------

Dieses Script ist Bestandteil der Batchsicherung in Verbindung mit FreeFileSync.



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Nun ja And und Or ist in der Kurzschreibweise || und &&.

Es ist in vielen Programmiersprachen standard deshalb verwende ich aus gewohnheit || und &&.

Ich finde es auch einfacher zu lesen aber ich könnte wetten du denkst das Gegenteil.


Visit the new forum ahkscript.org.

http://ahkscript.org


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Danke nnnik,

 

das werde ich mir gleich mal abspeichern, das steigert das Verständnis zu so manchem Script.

Ich danke Dir und ja, ich würde lieber AND und OR verwenden. Aber wir sind ja hier nicht bei "Wünsch Dir was"...



CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

So funktioniert es perfekt für mich, allerdings glaube ich das es gestrafft werden könnte.

Wie könnte man die Funktionen der Auswertung und der kompletten Hinzufügung der Backupdateien zusammenfassen???
Allerdings soll der Ablauf genau so bleiben wie er ist.
 

Also erst werden die ersten 11 Zeilen ausgewertet, anschließend die Zusammenfassung mit den Fehler- und / oder Erfolgsmeldungen geschrieben und darunter werden die Logfiles komplett eingefügt. Und anschließend das Ganze per Mail als Text versendet.

; ------------------------------------ Pruefe ob USB Laufwerk P (USB Laufwerk 1) angeschlossen ist ------------------------------------
if (FileExist("%Pruefdatei_001%")) ; kontrollieren ob Pfad oder Datei existiert, evtl. dummyfile erstellen, Quelle: http://www.autohotkey.com/docs/commands/IfExist.htm
{
    ; ---------- Loesche alte Logdateien ------------------------------------------------
    FileDelete, %PfadzurLogdatei%*.log ; Alte Logdateien werden geloescht
    
    RunWait, "%ProgPfad%" "%Spiegelung_USB%" -leftdir "%Quelle_D%" -rightdir "%Ziel_P%",,
    ; MsgBox Daten von Laufwerk D werden auf Laufwerk P gesichert.
    if (ErrorLevel = 0) ; Datenspiegelung laeuft
    
    
    ; --------------------- Fehlerpruefung der Logfiles ----------------------------------------------------------------------------------
    Loop, %PfadzurLogdatei%*.log
    {
   ; Gibt den Namen des Logfiles (nicht den Pfad) aus
   Ergebnis .= "`n`n------------ [ - " A_LoopFileName " - ] ------------"
   ; --------------------- automatische Auswertung des Logfiles -------------------------------------------------
   Fehler := False ; Grundstellung Fehlerflag = False
   Loop, Read, %A_LoopFileFullPath% ; Die Variable muss in %% eigebettet sein, andernfalls funktioniert es nicht
   {
      If InStr(A_LoopReadLine, FFSyncVar1) Or InStr(A_LoopReadLine, FFSyncVar2) Or InStr(A_LoopReadLine, FFSyncVar3) Or InStr(A_LoopReadLine, FFSyncVar4)
      ; pruefe ob eine der oben genannten Variablen zutrifft, falls ja ist ein Fehler aufgetreten
         Fehler := True
         If (A_Index > 11) Or (Fehler)
         ; Nur die ersten 11 Zeilen pruefen; falls ein Fehler gefunden wird - setzte Fehler und gehe zur naechsten Datei
         Break
   }
   If (Fehler)
      Ergebnis .= "`n############################################################################################`n##################---Fehler bei der Synchronisation / Datensicherung!!!---##################`n############################################################################################"
    Else
      Ergebnis .= "`n >>>>>>>>>> Die Synchronisation / Datensicherung war erfolgreich. <<<<<<<<<< "
    }
    ; ------------------- ENDE Fehlerpruefung der Logfiles ---------------------------------------------------------
 

    ; Den erhaltenen Inhalt der Variable "Ergebnis" in die Textdatei Backup.txt schreiben
    FileDelete, %PfadzurLogdatei%%BackupZusammenfassung% ; Alte Backup Datei wird geloescht
    FileAppend, %Ergebnis%, %PfadzurLogdatei%%BackupZusammenfassung% ; Schreibt die Infos der Fehlerpruefung in eine Text Datei
    ; --------------------- ENDE Logfilereader -----------------------------------------------------------------------------



    ; --------------------- Backup-Log Zusammenfassung --------------------------------------------
    Loop, %PfadzurLogdatei%*.log
    {
     LogDetails .= "`n`n`n`n------------ [ - " A_LoopFileName " - ] ------------`n"
     ; zeigt den Namen des Logfiles (nicht den Pfad) und den Inhalt der Logdateien an - %% darf nicht verwendet werden
    Loop, Read, %A_LoopFileFullPath% ; Die Variable muss in %% eigebettet sein, andernfalls wird der Logfile Inhalt nicht angezeigt
        LogDetails .= a_loopreadline "`n"
    }

    ; ------------------------------------------------------------------------------------------
    ; Fuege die Zusammenfassung in die angegebene Textdatei ein
    ; ------------------------------------------------------------------------------------------
 
    FileAppend, %LogDetails%, %PfadzurLogdatei%%BackupZusammenfassung% ; Schreibt die Infos der Logdateien in die Textdatei
    ; --------------------- ENDE Backup-Log Zusammenfassung ---------------------------------------
    
    
    
    ; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ; ---------------------------- Sende eine E-Mail mit den Daten und unter Verwendung der Parameter ----------------------------------------------------------------------
    Runwait, %SwithMailOrdner%SwithMail.exe /Silent /Attachment "%PfadzurLogdatei%%BackupZusammenfassung%" /FromName "%E_Mail_von%" /Subject "%Betreff_der_Mail%" /BodyTxt "%PfadzurLogdatei%%BackupZusammenfassung%" /XML "%SwithMailOrdner%%SwithMail_XML%" , , ; starte SwithMail.exe mit den Parametern, "im Arbeitsverzeichnis" ,
    ; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    break  ; Die Schleife wird unterbrochen
} --------------------- ENDE Backup-Log Zusammenfassung ---------------------------------------

Wenn ich dies für mehrere Laufwerke verwenden möchte, macht es ja Sinn dies in Funktionen auszulagern. Wie können diese dann angesprochen werden?
  



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Wie ich es (unter Einsatz des File Objects) machen würde:

 

Spoiler

*ungetestet*


Prefer ahkscript.org for the time being.


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo just me,

 

erst einmal vielen Dank für Deine Mühe, das muss ich mir erst einmal in Ruhe ansehen, damit ich da den Durchblick erlangen kann ;-)
Wird wohl aber noch ein paar Tage dauern.

Auch das CCleaner Projekt ist noch nicht begraben, ich habe so bis Ende September spätestens geplant es um Abschluss zu bringen.
Ich wünsche noch einen schönen Abend...



CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo just me,

 

noch eine kurze Verständnisfrage:
 

; Alternative 2: Sammeldatei an Prüfdatei anhängen und leeren ==========================================================
HSDAT.Pos := 0                ; Dateizeiger der Sammeldatei auf den Dateianfang setzen
HPDAT.Write(HSDAT.Read())     ; Inhalt der Sammeldatei an die Prüfdatei anhängen
HSDAT.Length := 0             ; Länge der Sammeldatei auf 0 setzen
HPDAT.Close()                 ; Prüfdatei schließen
HSDAT.Close()                 ; Sammeldatei schließen

gehört der obere Teil dann hier hin:

HPDAT := FileOpen(PDAT, "w")  ; Ergebnisdatei zum Schreiben öffnen, vorhandener Inhalt wird gelöscht
HSDAT := FileOpen(SDAT, "rw") ; Sammeldatei zum Lesen und Schreiben öffnen, vorhandener Inhalt wird gelöscht

Also anstatt der oberen 2 Zeilen, der Inhalt der Alternative 2, oder habe ich das Prinzip komplett mißverstanden?

Denn so hätte ich es ja gern, die Ergebnisdatei oben, die Sammeldatei, also die detaillierten Logdateien darunter angehängt...

Es wäre schön wenn Du mich hier nochmal erleuchten könntest... unsure.png



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Das hast Du völlig richtig verstanden. wink.png


Prefer ahkscript.org for the time being.


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Danke...



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Ich bin mir nicht mehr sicher, ob ich Deine Absichten richtig gedeutet habe. Deshalb noch einmal:

 

Entweder lässt Du die zwei Anweisungen unter "Alternative 1" stehen, oder die fünf Anweisungen unter "Alternative 2".

 

Die FileOpen Anweisungen bleiben in beiden Fällen wo sie sind.


Prefer ahkscript.org for the time being.