Voici une fonction que j'ai écrite pour nettoyer les logs de l'excellent Robocopy.
Car j'utilise Robocopy pour sauvegarder des répertoires de serveurs avec plus de 300 Go de fichiers et le rapport de logs fait plus de 25 Mo. Hors ce qui m'intéresse est juste de savoir les fichiers qu'il a traités ou pour lesquels il y a eu un problème.
Cette fonction permet de ne conserver que les lignes dans lesquelles Robocopy a signalé quelque chose.
La fonction /LOG+ de Robocopy permet de logguer plusieurs sauvegardes dans un seul fichier. Ce cas là est géré et les entêtes et pieds de rapports sont conservés.
N'hésitez pas si elle peut vous servir et dites moi si vous avez des remarques dessus.
#include <Array.au3>
#include <File.au3>
_bCleanLogRcopy("logR.txt")
; CLEAN LOG ROBOCOPY 2.3
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func _bCleanLogRcopy($clean_log)
; Sort de la fonction si fichier log inexistant
If not FileExists($clean_log) Then Return
; Compteur zone liste
Dim $clean_cpt_zone=0
Dim $clean_ligne
; Fichier log => Tab
_FileReadToArray($clean_log, $clean_ligne)
; Suppression fichier log
FileDelete($clean_log)
$clean_log2 = FileOpen($clean_log, 10)
; Boucle tab log
For $i=1 to $clean_ligne[0]-1
; Détection zone fichiers et répertoires
If StringLeft($clean_ligne[$i],69)="---------------------------------------------------------------------" Then $clean_cpt_zone=$clean_cpt_zone+1
; Si compteur =5 remise à 1
If $clean_cpt_zone=5 Then $clean_cpt_zone=1
; Cas possibles
Select
; Zone entête : copie intégrale
Case $clean_cpt_zone <3
FileWriteLine($clean_log2,$clean_ligne[$i])
ConsoleWrite($clean_cpt_zone & " > " & $clean_ligne[$i] & @LF)
; Zone fichiers ou répertoires : copie uniquement delta ou problèmes
Case $clean_cpt_zone =3
If (StringInStr($clean_ligne[$i],"New Dir")>0 _
Or StringInStr($clean_ligne[$i],"New File")>0 _
Or StringInStr($clean_ligne[$i],"*EXTRA File")>0 _
Or StringInStr($clean_ligne[$i],"Older")>0 _
Or StringInStr($clean_ligne[$i],"Newer")>0 _
Or StringInStr($clean_ligne[$i],"ERROR")>0 _
Or StringInStr($clean_ligne[$i],"AccŠs refus‚.")>0 _
Or StringInStr($clean_ligne[$i],"Waiting ")>0 _
Or StringLeft($clean_ligne[$i],69)="---------------------------------------------------------------------") Then
FileWriteLine($clean_log2,$clean_ligne[$i])
ConsoleWrite($clean_cpt_zone & " > " & $clean_ligne[$i] & @LF)
EndIf
; Zone résumé : copie intégrale
Case $clean_cpt_zone =4
FileWriteLine($clean_log2,$clean_ligne[$i])
ConsoleWrite($clean_cpt_zone & " > " & $clean_ligne[$i] & @LF)
EndSelect
Next
FileClose($clean_log2)
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX