;===================================================================================================================================# ;Function Name....: _FileListToRekursiv($Pfad, $Wildc = '*', $Flag = 0, $TB = 0, $Mehr = 0) ;Description......: Auflistung von Dateien ;$Pfad............: Pfad ;$Wildc...........: '*' (Standart) Suchbegrif u. o. Wildcards bei Wildcards mit o. suchbegriff $_Flag_ auf '3' setzen es ist auch ; möglich mehrere suchbegriffe zu suchen z.B (*wma,*mp3,*txt) o. (wma,mp3,txt) getrennt mit ',' ;$Flag............: '0' (Standart) Datein u. Ordner '1' nur Datein '2' nur Ordner '3' um mit suchbegriffen zu suchen wie (*.txt) ;$TB..............: '0' (Standart) für alle Unter-Verzeichnisse ;$Mehr............: '0' (Standart) Ein duchlauf dann wird $RAS gelöscht : '1' Ein Speicher für wiederholten aufruf. ;Return Value(s)..: Array mit den gefundenen Dateien u. o Ordner Array[0] endhält die anzahl (Fund) ;Author(s)........: Kleiner (www.autoit.de) # 21.12.2010 00:00 # ;====================================================================================================================================# Global Static $K32 = DllOpen('Kernel32.dll') Global $F Global $FN Global $FL Global $RP Global $RAS Global $Expan Global Const $IHV = -1 Global Const $Wstr = 'wstr' Global Const $Dword = 'dword' Global Const $REPARSE_POINT = 0x400 Global Const $sDelim = '\', $sDelim1 = '|', $sW = '*' Global Const $GetFileAttributesW = 'GetFileAttributesW' Func _FileListToRekursiv($Pfad, Const $Wildc = '*', Const $Flag = 0, Const $TB = 0, Const $Mehr = 0) If Not $Mehr Then $RAS = '' $Pfad = StringRegExpReplace($Pfad, '[\\/]+\z', $sDelim) & $sDelim If Not FileExists($Pfad) Then Return SetError(1, 0, '') If StringRegExp($Wildc, '[\\/:><\|]|(?s)\A\s*\z') Then Return SetError(2, 0, '') If Not ($Flag = 0 Or $Flag = 1 Or $Flag = 2 Or $Flag = 3) Then Return SetError(3, 0, '') ToRekursiv($Pfad, StringReplace(StringReplace($Wildc, $sW, ''), ',', '$' & $sDelim1) & '$', $Flag, $TB, $Pfad) If Not $RAS Then Return SetError(4, 0, '') Return StringSplit(StringTrimLeft($RAS, 1), $sDelim1) EndFunc ;==>_FileListToRekursiv Func ToRekursiv($Pfad, $Wildc, $Flag, $TB, $ConstPfad) $FL = '' If StringInStr($Pfad, $sDelim, 0, $TB, StringLen($ConstPfad) + 1) Then Return True $F = FileFindFirstFile($Pfad & $sW) If ($F <> $IHV) Then Do $FN = FileFindNextFile($F) If @error Then ExitLoop $Expan = @extended Switch $Flag Case 0 $RAS &= $sDelim1 & $Pfad & $FN If $Expan Then $FL &= $sDelim1 & $Pfad & $FN & $sDelim Case 1 Switch $Expan Case 0 $RAS &= $sDelim1 & $Pfad & $FN Case 1 $FL &= $sDelim1 & $Pfad & $FN & $sDelim EndSwitch Case 2 If Not $Expan Then ContinueLoop $RAS &= $sDelim1 & $Pfad & $FN $FL &= $sDelim1 & $Pfad & $FN & $sDelim Case 3 If $Expan Then $FL &= $sDelim1 & $Pfad & $FN & $sDelim If StringRegExp($FN, $Wildc) Then $RAS &= $sDelim1 & $Pfad & $FN EndSwitch Until False EndIf FileClose($F) If Not $FL Then Return True For $For In StringSplit(StringTrimLeft($FL, 1), $sDelim1, 2) $RP = DllCall($K32, $Dword, $GetFileAttributesW, $Wstr, $For) If @error Then Return True If Not BitAND($RP[0], $REPARSE_POINT) Then ToRekursiv($For, $Wildc, $Flag, $TB, $ConstPfad) Next EndFunc ;==>ToRekursiv