- Offizieller Beitrag
Hi,
ich hab mal die Rekursive Datei und/oder Ordner Auflistung per Objekt umgesetzt. (Ist viel kürzer als die ..FirstFile/..NextFile Variante )
Vielleicht habt ihr mal Bedarf.
Ihr übergebt Pfad (für aktuellen Pfad kann '.' und für übergeordneten Pfad kann '..' verwendet werden), Dateierweiterung ('*' oder -1 für alle[Standard]) und ein OrdnerFlag (-1 Datei+Ordner[Standard], 0 nur Dateien, 1 nur Ordner).
Rückgabewert ist ein Array mit der Anzahl gefundener Pfade in Array[0].
(SciTE warnt beim Ausführen, da 2 Variablen erst innerhalb der Funktion erstellt werden)
Edit: Auf mehrfachen Wunsch einer einzelnen Dame habe ich jetzt noch die Option zur Wahl des Rückgabetyps eingebaut. Entweder als Array (Standard), Flag 0, oder als @LF-getrennten String mit Flag 1.
Edit 03.07.08: Eine Ergänzung eingefügt.
Bei Stringrückgabe kann das Trennzeichen selbst gewählt werden. Vordefiniert: 0=@CRLF (Standard); 1=@CR; 2=@LF
Die Warnung wegen noch nicht deklarierter Variable habe ich jetzt auch verbannt.
Edit 16.09.08: Kleine Korrekturen
Wahl der Trennzeichen jetzt festgelegt auf: 0=@CRLF (Standard) / 1=@CR/ 2=@LF / 3=; / 4=|
Dank Oscars Hinweisen Probleme bei Trennzeichen unterschiedlicher Länge (@CR=1, @CRLF=2) beseitigt.
_GetFilesFolder_Rekursiv()
#include<Array.au3>
$ret = _GetFilesFolder_Rekursiv('.', 'au3',0,1)
If IsArray($ret) Then
_ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
Else
ConsoleWrite($ret & @CRLF)
EndIf
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc