Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include-once
- #include <Array.au3>
- #include <File.au3>
- ;*******************************************************************************************************************************************************************************************************************************************
- ; Funktion _ordner_rekursiv($udf_quellordner[, $udf_Ordner_Dateien[, $udf_unterordner=False[, $udf_spalte_datum [, $udf_dateityp = "*"[, $udf_auslassen = ""]]]]])
- ; Beschreibung ermittelt alle Dateien/Ordner des angegebenen Verzeichnisses
- ; Parameter $udf_quellordner: der zu durchsuchende Ordner (Angabe: einzelner Ordner als String oder mehrere Ordner im Array beginnend bei 1)
- ; optional $udf_Ordner_Dateien: 1 = Dateien auflisten (Standard) 2 = Ordner auflisten
- ; optional $udf_unterordner: True = Unterordner nicht miteinbeziehen (Standard) False = Unterordner nicht miteinbeziehen
- ; optional $udf_spalte_datum: True = Änderungsdatum der Datei ermitteln False = Änderungsdatum der Datei nicht ermitteln (Standard)
- ; optional $udf_dateityp: einzuschließende Dateitypen (mehrere Typen durch | trennen) "*" >>> alle (Standard)
- ; optional $udf_auslassen: Wörter, die im Pfad oder Dateinamen vorkommen, auslassen (mehrere durch | trennen) "" <<< Standard
- ; Rückgabewert Erfolg: Gibt ein Array mit 3 Spalten zurück (Dateiname, Dateipfad, Änderungsdatum)
- ; Fehler: 0 setzt @error
- ; @error = 1 mindestens 1 Pfad existiert nicht
- ; Autor Tweaky (www.autoit.de)
- ;*******************************************************************************************************************************************************************************************************************************************
- ;********************************************
- ; Ordner rekursiv (Hauptfunktion) *
- ;********************************************
- Func _ordner_rekursiv($udf_quellordner, $udf_Ordner_Dateien = 1, $udf_unterordner = True, $udf_spalte_datum = False, $udf_dateityp = "*", $udf_auslassen = "")
- Local $verzeichnisse_alle[1] ;Array für die Ordner
- Local $array_alles[1000000][3] ;Array für die Ordner und Dateien
- Local $szDrive, $szDir, $szFName, $szExt
- If Not IsArray($udf_quellordner) Then
- $udf_quellordner_tmp = $udf_quellordner
- Dim $udf_quellordner[2]
- $udf_quellordner[1] = $udf_quellordner_tmp
- EndIf
- For $i = 1 To UBound($udf_quellordner) - 1
- If Not FileExists($udf_quellordner[$i]) Or Not StringInStr($udf_quellordner[$i], ":") Then
- SetError(1)
- Return 0
- EndIf
- If StringRight($udf_quellordner[$i], 1) <> "\" Then $udf_quellordner[$i] &= "\"
- $udf_quellordner_einzeln = $udf_quellordner[$i]
- If $udf_unterordner = True Then ;mit Unterordner
- _ordner_rekursiv_mit_unterordner($udf_quellordner_einzeln, $verzeichnisse_alle)
- _ArrayAdd($verzeichnisse_alle, $udf_quellordner_einzeln)
- Else ;ohne Unterordner
- $verzeichnisse_alle = $udf_quellordner
- EndIf
- Next
- If IsArray($verzeichnisse_alle) Then $verzeichnisse_alle[0] = UBound($verzeichnisse_alle) - 1 ;In die erste Zeile die Anzahl der Dateien schreiben
- If $udf_Ordner_Dateien = 1 Then ;Dateien auflisten
- $zaehler_fortlaufend = 0
- If Not IsArray($verzeichnisse_alle) Then
- $verzeichnisse_alle_tmp = $verzeichnisse_alle
- Dim $verzeichnisse_alle[2]
- $verzeichnisse_alle[1] = $verzeichnisse_alle_tmp
- EndIf
- For $u = 1 To UBound($verzeichnisse_alle) - 1
- $array_alle_dateien = _FileListToArray($verzeichnisse_alle[$u], "*", 1)
- For $k = 1 To UBound($array_alle_dateien) - 1
- $kriterien_ok = 0
- If $udf_dateityp = "*" Then ;Dateityp nicht angegeben oder alle Dateien
- $kriterien_ok = 1
- ElseIf StringInStr($udf_dateityp, "|") Then ;Dateitypen angegeben
- $dateityp_split = StringSplit($udf_dateityp, "|")
- $udf_dateiendung_array = _PathSplit($array_alle_dateien[$k], $szDrive, $szDir, $szFName, $szExt)
- $udf_dateiendung = $udf_dateiendung_array[4]
- For $i = 1 To UBound($dateityp_split) - 1
- If "." & $dateityp_split[$i] = StringRight($array_alle_dateien[$k], StringLen($udf_dateiendung)) Then
- $kriterien_ok = 1
- ExitLoop
- EndIf
- Next
- EndIf
- If $udf_auslassen <> "" Then ;Wörter in dem Pfad und Datei auslassen
- $auslassen_split = StringSplit($udf_auslassen, "|")
- For $i = 1 To UBound($auslassen_split) - 1
- If StringInStr($array_alle_dateien[$k], $auslassen_split[$i]) Or StringInStr($verzeichnisse_alle[$u], $auslassen_split[$i]) Then
- $kriterien_ok = 0
- ExitLoop
- EndIf
- Next
- EndIf
- ;Papierkorb und System Volume Information wird nicht mitkopiert
- If StringInStr($array_alle_dateien[$k], 'RECYCLER') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLER') _
- Or StringInStr($array_alle_dateien[$k], 'RECYCLED') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLED') _
- Or StringInStr($array_alle_dateien[$k], 'System Volume Information') Or StringInStr($verzeichnisse_alle[$u], 'System Volume Information') _
- Or StringInStr($array_alle_dateien[$k], '$RECYCLE.BIN') Or StringInStr($verzeichnisse_alle[$u], '$RECYCLE.BIN') Then
- $kriterien_ok = 0
- ExitLoop
- EndIf
- ;wenn der Dateityp passt und die Datei bzw. der Ordner nicht ausgelassen werden soll
- If $kriterien_ok = 1 Then
- $zaehler_fortlaufend += 1
- $array_alles[$zaehler_fortlaufend][0] = $verzeichnisse_alle[$u]
- $array_alles[$zaehler_fortlaufend][1] = $array_alle_dateien[$k]
- If $udf_spalte_datum = True Then
- $time2 = FileGetTime($verzeichnisse_alle[$u] & "\" & $array_alle_dateien[$k], 0) ;"Datum geändert" auslesen
- $array_alles[$zaehler_fortlaufend][2] = $time2[0] & $time2[1] & $time2[2] & $time2[3] & $time2[4] & $time2[5]
- EndIf
- EndIf
- Next
- Next
- Else ;Ordner auflisten
- For $i = 1 To UBound($verzeichnisse_alle) - 1
- $array_alles[$i][0] = $verzeichnisse_alle[$i]
- $zaehler_fortlaufend = UBound($verzeichnisse_alle) - 1
- Next
- EndIf
- ;Leere Zeilen am Ende löschen
- ReDim $array_alles[$zaehler_fortlaufend + 1][3]
- ;In die erste Zeile die Anzahl der Dateien schreiben
- If IsArray($array_alles) Then $array_alles[0][0] = UBound($array_alles) - 1
- $verzeichnisse_alle = 0
- Return $array_alles
- EndFunc ;==>_ordner_rekursiv
- ;**************************************
- ; Unterordner durchsuchen *
- ;**************************************
- Func _ordner_rekursiv_mit_unterordner($udf_quellordner, ByRef $verzeichnisse_alle)
- $verzeichnisse = _FileListToArray($udf_quellordner, "*", 2)
- For $i = 1 To UBound($verzeichnisse) - 1
- $verzeichnisse[$i] = $udf_quellordner & $verzeichnisse[$i] & "\"
- _ArrayAdd($verzeichnisse_alle, $verzeichnisse[$i])
- _ordner_rekursiv_mit_unterordner($verzeichnisse[$i], $verzeichnisse_alle)
- Next
- EndFunc ;==>_ordner_rekursiv_mit_unterordner
Advertisement
Add Comment
Please, Sign In to add comment