Hallo Merlin,
ich habe mich mal bei Oscar bedient und daraus meinen Lösungsvorschlag entwickelt:
Spoiler anzeigen
#include <Array.au3>
#include <Date.au3>
$aChecked = _Check('c:\test1', 'c:\test2', 5)
_ArrayDisplay($aChecked)
Func _Check($sOrdner1, $sOrdner2, $iDays)
Local $aReturn1 = _RecursiveFileListToArray($sOrdner1, '', 1, 1, @CRLF, $sOrdner1) ; Alle Dateien im ausgewählten Ordner und Unterordnern)
Local $aReturn2 = _RecursiveFileListToArray($sOrdner2, '', 1, 1, @CRLF, $sOrdner2) ; Alle Dateien im ausgewählten Ordner und Unterordnern)
Local $aResult[$aReturn1[0] + $aReturn2[0]][4]
Local $iNew = 1
For $i = 1 To $aReturn1[0]
$iPos = _ArraySearch($aReturn2, $aReturn1[$i])
If $iPos > -1 Then
;datei existiert auch um 2. Verzeichnis
$sDate1 = StringRegExpReplace(FileGetTime($sOrdner1 & $aReturn1[$i], 0, 1), '(\d{4})(\d{2})(\d{2})(.*)', '$1/$2/$3')
$sDate2 = StringRegExpReplace(FileGetTime($sOrdner2 & $aReturn2[$iPos], 0, 1), '(\d{4})(\d{2})(\d{2})(.*)', '$1/$2/$3')
$iDiffDays = _DateDiff('D', $sDate1, $sDate2)
;ConsoleWrite($aReturn1[$i] & " " & $sDate1 & " " & $sDate2 & " " & $iDiffDays & @CRLF)
If $iDiffDays > $iDays Or ($iDiffDays * - 1) > $iDays Then
$aResult[$iNew][0] = $aReturn1[$i]
$aResult[$iNew][1] = $sDate1
$aResult[$iNew][2] = $sDate2
$aResult[$iNew][3] = $iDiffDays
$iNew += 1
EndIf
_ArrayDelete($aReturn2, $iPos) ;damit in $aReturn2 nur Dateien übrigbleiben die nicht i $aReturn1 sind
$aReturn2[0] -= 1
Else
$aResult[$iNew][0] = $aReturn1[$i]
$aResult[$iNew][2] = ''
$aResult[$iNew][3] = "<-1>" ;Kenzeichnung dass Datei nur in 1
$iNew += 1
EndIf
Next
_ArrayDisplay($aResult)
For $i = 1 To $aReturn2[0]
$aResult[$iNew][0] = $aReturn2[$i]
$sDate2 = StringRegExpReplace(FileGetTime($sOrdner2 & $aReturn2[$i], 0, 1), '(\d{4})(\d{2})(\d{2})(.*)', '$1/$2/$3')
$aResult[$iNew][1] = ''
$aResult[$iNew][2] = $sDate2
$aResult[$iNew][3] = "<-2>" ;Kenzeichnung dass Datei nur in 2
$iNew += 1
Next
$aResult[0][0] = $iNew - 1
ReDim $aResult[$iNew][4]
$aResult[0][1] = $sOrdner1
$aResult[0][2] = $sOrdner2
$aResult[0][3] = "Differenz"
Return $aResult
EndFunc ;==>_Check
;===============================================================================
; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
; einem RegExp-Pattern entsprechen
; Parameter(s): $sPath = Startverzeichnis
; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
; $iFlag = Auswahl
; 0 = Dateien & Verzeichnisse
; 1 = nur Dateien
; 2 = nur Verzeichnisse
; $iFormat = Rückgabeformat
; 0 = String
; 1 = Array mit [0] = Anzahl
; 2 = Nullbasiertes Array
; $sDelim = Trennzeichen für die String-Rückgabe
; Requirement(s): AutoIt 3.3.0.0
; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
; Author(s): Oscar (http://www.autoit.de)
; Anregungen von: bernd670 (http://www.autoit.de)
;modified: autoBert um den ursprünglich übergebenen Ordner wegzulassen
;===============================================================================
Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF, $sExlude = '')
Local $hSearch, $sFile, $sReturn = ''
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
$sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, $sDelim, $sExlude)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
$sReturn = StringReplace($sReturn, $sExlude, "")
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc ;==>_RecursiveFileListToArray
edit: Skript abgeändert so dass es jetzt egal ist in welchem der beiden Ordner sich die neuere Version befindet (Kennzeichnung durch positive der negatve Anzahl der Tage).
Da dadurch Fehlinterpretationen vorkommen konnten die Kennzeichnung für fehlende Dateien geändert: "<-1>" Datei existiert nur in Ordner 1, "<-2>" Datei existiert nur in Ordner 2.
Ausserdem werden die ermittelten Datumsangaben jetzt im Ergebnisarray gespechert.
mfg autoBert