;===================================================================================================================================# ;Function Name....: _FileListToRekursiv($Path, $Wildc = '*', $iFlag = 0, $iTB = 0, $iIntex = 0, $More = False, Const $CaSen = 0) ;Description......: Auflistung von Dateien u. o. Ordner (Rekursiv) ;$Path............: Pfad angabe ;$Wildc...........: '*' (Standart) Suchbegrif u. o. Wildcards nur (*) möglich ; bei Wildcards u. suchbegriff ist $iFlag auf '3' zu setzen ; es ist auch möglich mehrere suchbegriffe zu suchen z.B *.wma,*.mp3,*.txt getrennt mit ',' ; ;$iFlag...........: '0' (Standart), Datein u. Ordner ; '1' nur Datein ; '2' nur Ordner ; '3' um mit suchbegriffen zu suchen *.txt ; '4' Microsoft MS-DOS Wild Card Match (nur ein Suchbegriff möglich) ; '5' Benutzer eigen, RegExp Match suche ; '6' suche für leere Ordner ; ;$iTB.............: '0' (Standart) für alle Unter-Verzeichnisse ; ;$iIndex..........: '0' (Standard), es fungiert jedes in den Trennzeichen enthaltene Zeichen als Trennmarkierung ; '1' es wird der gesamte Trennzeichenstring als Trennmarkierung genutzt ; '2' deaktiviert die Rückgabe der Anzahl im ersten Element. Dadurch wird das Array 0-basierend. ; ;$More............: 'False' (Standart) Ein duchlauf dann wird $RAS gelöscht ; 'True' Ein Speicher für wiederholten aufruf. ; !Wichtig! Bool ist zu verwenden ; ;$CaSen...........: ist nur mit Flag 3 zu Verwenden auf alle anderen Flags, hat Case-Sensitiv keine auswirkung. ; 0 = Groß- und Kleinschreibung werden nicht berücksichtigt (Standardwert). ; 1 = Berücksichtigt Groß- und Kleinschreibung. ; 2 = Groß- und Kleinschreibung werden nicht berücksichtigt. Es findet ein einfacherer schnellerer Vergleich statt ; ;Return Value(s)..: Array mit den gefundenen Dateien u. o Ordner ; ;error............: -1 unzulässiges zeichen ; -2 error Flag ; -3 es konnte kein Array erstellt werden ; -4 suche war erfolglos o. Dll aufruf ist gescheitert ; ; ; ;Author(s)........: Kleiner (www.autoit.de) ;====================================================================================================================================# ;================================================================================ Variable - Constante# Global Static $__K32 = DllOpen('Kernel32'); DllCall( Reparse Point ) Global Static $__Shl = DllOpen('Shlwapi'); DllCall( Microsoft MS-DOS Wild Card Match ) Global $FN Global $RP Global $Ex Global $RAS Global $Spec Global $While Global $iCP_Len Global $casesense Global Const $IHV = 0xFFFFFFFF; INVALID_HANDLE_VALUE = -1 Global Const $REPARSE_POINT = 0x400; FILE_ATTRIBUTE_REPARSE_POINT = 1024 Global Const $sBack = '\', $sDelim = '|', $sW = '*' ;=====================================================================================================# Func _FileListToRekursiv($Path, Const $Wildc = '*', Const $iFlag = 0, Const $iTB = 0, Const $iIntex = 0, Const $More = False, Const $CaSen = 0) $iCP_Len = '' If $iTB Then $iCP_Len = StringLen($Path) + 1 If Not IsBool($More) Or Not $More Then $RAS = '' $Path = StringRegExpReplace($Path, '[\\/]+\z', $sBack) & $sBack If Not FileExists($Path) Then Return SetError(1, 0, '') If IIF($iFlag = 5, False, StringRegExp($Wildc, '[\\/:><\|]|(?s)\A\s*\z')) Then Return SetError(1, 0, -1) If ($iFlag < 0 Or $iFlag > 6) Then Return SetError(2, 0, -2) If Not $iFlag Or $iFlag = 2 Then $RAS &= $sDelim & $Path If $iFlag = 3 Then Local $aW_s = StringSplit($Wildc, ',') If Not IsArray($aW_s) Then Return SetError(3, 0, -3) Local $aW_s2[$aW_s[0]][3] $casesense = $CaSen For $i = 1 To $aW_s[0] $aW_s2[$i - 1][0] = (StringLeft($aW_s[$i], 1) = $sW) + IIF(StringRight($aW_s[$i], 1) = $sW, 2, 0) $aW_s2[$i - 1][1] = StringReplace($aW_s[$i], '*', '') $aW_s2[$i - 1][2] = StringLen($aW_s2[$i - 1][1]) Next EndIf ToRekursiv(FileFindFirstFile($Path & $sW), $Path, IIF(IsDeclared('aW_s2'), Execute('$aW_s2'), $Wildc), $iFlag, $iTB) If Not $RAS Then Return SetError(4, 0, -4) Return StringSplit(StringTrimLeft($RAS, 1), $sDelim, $iIntex) EndFunc ;==>_FileListToRekursiv Func ToRekursiv($HWnd, $Path, $Wildc, $iFlag, $iTB, $FL = '') If StringInStr($Path, $sBack, False, $iTB, $iCP_Len) Then Return True If $HWnd = $IHV And $iFlag = 6 Then $RAS &= $sDelim & StringTrimRight($Path, 1) $While = $HWnd <> $IHV While $While $FN = FileFindNextFile($HWnd) If @error Then ExitLoop $Ex = @extended Switch $iFlag Case 0 $RAS &= $sDelim & $Path & $FN If $Ex Then $FL &= $sDelim & $Path & $FN & $sBack Case 1 Switch $Ex Case 0 $RAS &= $sDelim & $Path & $FN Case 1 $FL &= $sDelim & $Path & $FN & $sBack EndSwitch Case 2 If Not $Ex Then ContinueLoop $RAS &= $sDelim & $Path & $FN $FL &= $sDelim & $Path & $FN & $sBack Case 3 If $Ex Then $FL &= $sDelim & $Path & $FN & $sBack If IsArray($Wildc) Then For $i = 0 To UBound($Wildc) - 1 Switch $Wildc[$i][0] Case 1 If Not StringCompare(StringRight($FN, $Wildc[$i][2]), $Wildc[$i][1], $casesense) Then $RAS &= $sDelim & $Path & $FN Case 2 If Not StringCompare(StringLeft($FN, $Wildc[$i][2]), $Wildc[$i][1], $casesense) Then $RAS &= $sDelim & $Path & $FN Case 3 If StringInStr($FN, $Wildc[$i][1], $casesense, 1) Then $RAS &= $sDelim & $Path & $FN EndSwitch Next EndIf Case 4 If $Ex Then $FL &= $sDelim & $Path & $FN & $sBack $Spec = DllCall($__Shl, 'Bool', 'PathMatchSpecW', 'wstr', $FN, 'wstr', $Wildc) If @error Then Return True If $Spec[0] Then $RAS &= $sDelim & $Path & $FN Case 5 If $Ex Then $FL &= $sDelim & $Path & $FN & $sBack If StringRegExp($FN, $Wildc) Then $RAS &= $sDelim & $Path & $FN Case 6 If $Ex Then $FL &= $sDelim & $Path & $FN & $sBack EndSwitch WEnd FileClose($HWnd) If Not $FL Then Return True For $For In StringSplit(StringTrimLeft($FL, 1), $sDelim, 2) $RP = DllCall($__K32, 'Dword', 'GetFileAttributesW', 'wstr', $For) If @error Then Return True Switch BitAND($RP[0], $REPARSE_POINT) Case False ToRekursiv(FileFindFirstFile($For & $sW), $For, $Wildc, $iFlag, $iTB) Case Else ContinueLoop EndSwitch Next EndFunc ;==>ToRekursiv ;===================================================================================================================================# ;Function Name....: IIF($expr, $Truepart = True, $Falsepart = False) ; ;Description......: If Abfrage ;$expr............: Wert zu Prüfung ;$Truepart........: Wenn Wert bei der Prüfung Wahr = ausgabe ( z.B True [Standart]) ;$Falsepart.......: Wenn Wert bei der Prüfung Falsch = ausgabe ( z.B False [Standart]) ;Return Value(s)..: Auswertung der Prüfung True/False/Benutzer(Ausgabe) ; ;Author(s)........: Kleiner (www.autoit.de) ;====================================================================================================================================# Func IIF($V_Expr, $F_True = True, $F_False = False) If $V_Expr Then Return $F_True Return $F_False EndFunc ;==>IIF