- Offizieller Beitrag
Hi,
vielleich hat noch wer Verwendung dafür.
Mit der Funktion lassen sich Ordnernamen (oder kpl. Pfade) in relativer Tiefe zum Startordner ausgeben.
Dazu wird ab Startordner rekursiv bis zur angegebenen Tiefe nach allen Verzeichnissen gesucht und die Ordner der letzten Ebene werden ausgegeben. Wahlweise wird der kpl. Pfad oder nur der Ordnername zurückgegeben.
_GetFolderInRelativeDepth
#Region - TimeStamp
; 2012-05-20 20:17:50 v 0.1
#EndRegion - TimeStamp
;===============================================================================
; Function Name....: _GetFolderInRelativeDepth
; Description......: Gibt alle Ordner (kpl. Pfade, od. nur Ordnername) in relativer Tiefe zum übergebenen Ordner zurück
; Parameter(s).....: $_sRootFolder Pfad unterhalb dem gesucht werden soll
; .................: $_iDepth Pfadebene unterhalb des Startordners
; .................: $fFullPath 1=Rückgabe der kpl. Ordnerpfade (Standard), 0=nur Ordnernamen
; Return Value(s)..: Erfolg Array mit den Ordner(Pfaden) der Ebene
; .................: Fehler 0, @error=1 (keine Ordner in dieser Ebene)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GetFolderInRelativeDepth($_sRootFolder, $_iDepth, $fFullPath=1)
Local $sFound, $hSearch = FileFindFirstFile($_sRootFolder & '\*.*'), $iRow = $_iDepth-1
If $_iDepth < 2 Then $iRow = 2
Local $aFolder[$iRow][2] = [[1]], $sOut = '', $iCurrDepth = 0, $i
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sFound), 'D') Then
If $_iDepth = 1 Then
If $fFullPath Then
$sOut &= $_sRootFolder & '\' & $sFound & Chr(0)
Else
$sOut &= $sFound & Chr(0)
EndIf
Else
ReDim $aFolder[$iRow][$aFolder[$iCurrDepth][0] +1]
$aFolder[$iCurrDepth][0] += 1 ; == UBound in dieser Zeile
$aFolder[$iCurrDepth][$aFolder[$iCurrDepth][0] -1] = $_sRootFolder & '\' & $sFound
EndIf
EndIf
WEnd
If $_iDepth = 1 Then
If $sOut = '' Then Return SetError(1,0,0)
Return StringSplit(StringTrimRight($sOut, 1), Chr(0))
EndIf
For $i = 0 To UBound($aFolder) -2 ; == Ordnerebene über Zieltiefe
For $j = 0 To UBound($aFolder,2) -1
If $aFolder[$i][$j] = '' Then ExitLoop
$hSearch = FileFindFirstFile($aFolder[$i][$j] & '\*.*')
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($aFolder[$i][$j] & '\' & $sFound), 'D') Then
If $aFolder[$i][0] = UBound($aFolder,2) Then
ReDim $aFolder[$iRow][$aFolder[$i][0] +1]
$aFolder[$i][0] += 1
EndIf
EndIf
WEnd
Next
Next
$i = UBound($aFolder) -1
For $j = 0 To UBound($aFolder,2) -1
If $aFolder[$i][$j] = '' Then ExitLoop
$hSearch = FileFindFirstFile($aFolder[$i][$j] & '\*.*')
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($aFolder[$i][$j] & '\' & $sFound), 'D') Then
If $fFullPath Then
$sOut &= $aFolder[$i][$j] & '\' & $sFound & Chr(0)
Else
$sOut &= $sFound & Chr(0)
EndIf
EndIf
WEnd
Next
If $sOut = '' Then Return SetError(1,0,0)
Return StringSplit(StringTrimRight($sOut, 1), Chr(0))
EndFunc ;==>_GetFolderInRelativeDepth