Guest User

Ordner.au3

a guest
Dec 2nd, 2011
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 7.92 KB | None | 0 0
  1. #include-once
  2. #include <Array.au3>
  3. #include <File.au3>
  4.  
  5. ;*******************************************************************************************************************************************************************************************************************************************
  6. ;    Funktion        _ordner_rekursiv($udf_quellordner[, $udf_Ordner_Dateien[, $udf_unterordner=False[, $udf_spalte_datum [, $udf_dateityp = "*"[, $udf_auslassen = ""]]]]])
  7. ;    Beschreibung    ermittelt alle Dateien/Ordner des angegebenen Verzeichnisses
  8. ;    Parameter        $udf_quellordner:        der zu durchsuchende Ordner            (Angabe: einzelner Ordner als String     oder     mehrere Ordner im Array beginnend bei 1)
  9. ;        optional    $udf_Ordner_Dateien:    1 = Dateien auflisten (Standard)        2 = Ordner auflisten
  10. ;        optional    $udf_unterordner:        True = Unterordner nicht miteinbeziehen (Standard)            False = Unterordner nicht miteinbeziehen
  11. ;        optional    $udf_spalte_datum:        True = Änderungsdatum der Datei ermitteln        False = Änderungsdatum der Datei nicht ermitteln (Standard)
  12. ;        optional    $udf_dateityp:            einzuschließende Dateitypen (mehrere Typen durch | trennen)        "*" >>> alle (Standard)
  13. ;        optional    $udf_auslassen:            Wörter, die im Pfad oder Dateinamen vorkommen, auslassen (mehrere durch | trennen)        "" <<< Standard
  14. ;    Rückgabewert    Erfolg:        Gibt ein Array mit 3 Spalten zurück (Dateiname, Dateipfad, Änderungsdatum)
  15. ;                    Fehler:        0    setzt @error
  16. ;                                @error = 1 mindestens 1 Pfad existiert nicht
  17. ;    Autor            Tweaky  (www.autoit.de)
  18. ;*******************************************************************************************************************************************************************************************************************************************
  19.  
  20.  
  21. ;********************************************
  22. ;        Ordner rekursiv (Hauptfunktion)     *
  23. ;********************************************
  24.  
  25. Func _ordner_rekursiv($udf_quellordner, $udf_Ordner_Dateien = 1, $udf_unterordner = True, $udf_spalte_datum = False, $udf_dateityp = "*", $udf_auslassen = "")
  26.     Local $verzeichnisse_alle[1] ;Array für die Ordner
  27.     Local $array_alles[1000000][3] ;Array für die Ordner und Dateien
  28.     Local $szDrive, $szDir, $szFName, $szExt
  29.  
  30.     If Not IsArray($udf_quellordner) Then
  31.         $udf_quellordner_tmp = $udf_quellordner
  32.         Dim $udf_quellordner[2]
  33.         $udf_quellordner[1] = $udf_quellordner_tmp
  34.     EndIf
  35.  
  36.     For $i = 1 To UBound($udf_quellordner) - 1
  37.         If Not FileExists($udf_quellordner[$i]) Or Not StringInStr($udf_quellordner[$i], ":") Then
  38.             SetError(1)
  39.             Return 0
  40.         EndIf
  41.  
  42.         If StringRight($udf_quellordner[$i], 1) <> "\" Then $udf_quellordner[$i] &= "\"
  43.  
  44.         $udf_quellordner_einzeln = $udf_quellordner[$i]
  45.  
  46.         If $udf_unterordner = True Then ;mit Unterordner
  47.             _ordner_rekursiv_mit_unterordner($udf_quellordner_einzeln, $verzeichnisse_alle)
  48.             _ArrayAdd($verzeichnisse_alle, $udf_quellordner_einzeln)
  49.         Else ;ohne Unterordner
  50.             $verzeichnisse_alle = $udf_quellordner
  51.         EndIf
  52.     Next
  53.  
  54.     If IsArray($verzeichnisse_alle) Then $verzeichnisse_alle[0] = UBound($verzeichnisse_alle) - 1 ;In die erste Zeile die Anzahl der Dateien schreiben
  55.  
  56.  
  57.  
  58.     If $udf_Ordner_Dateien = 1 Then ;Dateien auflisten
  59.         $zaehler_fortlaufend = 0
  60.  
  61.         If Not IsArray($verzeichnisse_alle) Then
  62.             $verzeichnisse_alle_tmp = $verzeichnisse_alle
  63.             Dim $verzeichnisse_alle[2]
  64.             $verzeichnisse_alle[1] = $verzeichnisse_alle_tmp
  65.         EndIf
  66.  
  67.         For $u = 1 To UBound($verzeichnisse_alle) - 1
  68.             $array_alle_dateien = _FileListToArray($verzeichnisse_alle[$u], "*", 1)
  69.  
  70.             For $k = 1 To UBound($array_alle_dateien) - 1
  71.                 $kriterien_ok = 0
  72.  
  73.                 If $udf_dateityp = "*" Then ;Dateityp nicht angegeben oder alle Dateien
  74.                     $kriterien_ok = 1
  75.  
  76.                 ElseIf StringInStr($udf_dateityp, "|") Then ;Dateitypen angegeben
  77.                     $dateityp_split = StringSplit($udf_dateityp, "|")
  78.                     $udf_dateiendung_array = _PathSplit($array_alle_dateien[$k], $szDrive, $szDir, $szFName, $szExt)
  79.                     $udf_dateiendung = $udf_dateiendung_array[4]
  80.                     For $i = 1 To UBound($dateityp_split) - 1
  81.                         If "." & $dateityp_split[$i] = StringRight($array_alle_dateien[$k], StringLen($udf_dateiendung)) Then
  82.                             $kriterien_ok = 1
  83.                             ExitLoop
  84.                         EndIf
  85.                     Next
  86.                 EndIf
  87.  
  88.                 If $udf_auslassen <> "" Then ;Wörter in dem Pfad und Datei auslassen
  89.                     $auslassen_split = StringSplit($udf_auslassen, "|")
  90.                     For $i = 1 To UBound($auslassen_split) - 1
  91.                         If StringInStr($array_alle_dateien[$k], $auslassen_split[$i]) Or StringInStr($verzeichnisse_alle[$u], $auslassen_split[$i]) Then
  92.                             $kriterien_ok = 0
  93.                             ExitLoop
  94.                         EndIf
  95.                     Next
  96.                 EndIf
  97.  
  98.                 ;Papierkorb und System Volume Information wird nicht mitkopiert
  99.                 If StringInStr($array_alle_dateien[$k], 'RECYCLER') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLER') _
  100.                         Or StringInStr($array_alle_dateien[$k], 'RECYCLED') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLED') _
  101.                         Or StringInStr($array_alle_dateien[$k], 'System Volume Information') Or StringInStr($verzeichnisse_alle[$u], 'System Volume Information') _
  102.                         Or StringInStr($array_alle_dateien[$k], '$RECYCLE.BIN') Or StringInStr($verzeichnisse_alle[$u], '$RECYCLE.BIN') Then
  103.                     $kriterien_ok = 0
  104.                     ExitLoop
  105.                 EndIf
  106.  
  107.                 ;wenn der Dateityp passt und die Datei bzw. der Ordner nicht ausgelassen werden soll
  108.                 If $kriterien_ok = 1 Then
  109.                     $zaehler_fortlaufend += 1
  110.                     $array_alles[$zaehler_fortlaufend][0] = $verzeichnisse_alle[$u]
  111.                     $array_alles[$zaehler_fortlaufend][1] = $array_alle_dateien[$k]
  112.  
  113.                     If $udf_spalte_datum = True Then
  114.                         $time2 = FileGetTime($verzeichnisse_alle[$u] & "\" & $array_alle_dateien[$k], 0) ;"Datum geändert" auslesen
  115.                         $array_alles[$zaehler_fortlaufend][2] = $time2[0] & $time2[1] & $time2[2] & $time2[3] & $time2[4] & $time2[5]
  116.                     EndIf
  117.  
  118.                 EndIf
  119.  
  120.             Next
  121.         Next
  122.  
  123.     Else ;Ordner auflisten
  124.         For $i = 1 To UBound($verzeichnisse_alle) - 1
  125.             $array_alles[$i][0] = $verzeichnisse_alle[$i]
  126.             $zaehler_fortlaufend = UBound($verzeichnisse_alle) - 1
  127.         Next
  128.     EndIf
  129.  
  130.     ;Leere Zeilen am Ende löschen
  131.     ReDim $array_alles[$zaehler_fortlaufend + 1][3]
  132.  
  133.     ;In die erste Zeile die Anzahl der Dateien schreiben
  134.     If IsArray($array_alles) Then $array_alles[0][0] = UBound($array_alles) - 1
  135.  
  136.     $verzeichnisse_alle = 0
  137.  
  138.     Return $array_alles
  139. EndFunc   ;==>_ordner_rekursiv
  140.  
  141.  
  142.  
  143. ;**************************************
  144. ;        Unterordner durchsuchen          *
  145. ;**************************************
  146.  
  147. Func _ordner_rekursiv_mit_unterordner($udf_quellordner, ByRef $verzeichnisse_alle)
  148.     $verzeichnisse = _FileListToArray($udf_quellordner, "*", 2)
  149.  
  150.     For $i = 1 To UBound($verzeichnisse) - 1
  151.         $verzeichnisse[$i] = $udf_quellordner & $verzeichnisse[$i] & "\"
  152.         _ArrayAdd($verzeichnisse_alle, $verzeichnisse[$i])
  153.         _ordner_rekursiv_mit_unterordner($verzeichnisse[$i], $verzeichnisse_alle)
  154.     Next
  155. EndFunc   ;==>_ordner_rekursiv_mit_unterordner
  156.  
Advertisement
Add Comment
Please, Sign In to add comment