Rekursive Datei/Ordner Auflistung per Objekt

    • 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 :D )
    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 :rofl: 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()
    [autoit]

    #include<Array.au3>
    $ret = _GetFilesFolder_Rekursiv('.', 'au3',0,1)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
    Else
    ConsoleWrite($ret & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]
  • Hi,

    ich habe dein Script auf mein Windows-Verzeichnis losgelassen, wirklich sehr schnell. Ich habe nur festgestellt, dass wenn ich das Ergebnis mit _ArrayDisplay ausgeben lasse, dass ab 3999 was komisches mit der Anzeige passiert. Es kann auch an der Funktion _ArrayDisplay liegen...
    (Siehe Anhang)
    autoit.de/wcf/attachment/2524/

  • Hallo BugFix.

    Cool !!!

    Ich würde gerne das, was unter der Spalte Col0 steht und da auch nur ab dem Array [1] die Daten gerne in eine Textdatei schreiben.
    Sinn ist, das ich so ein dir *.*/s machen kann ohne Datum usw. und das ich dann noch was davor mittels Replace einfügen könnte bzw. dahinter. Das habe ich früher beim Batching auch so gemacht, nur bekomme ich eine solche Liste nicht mit AutoIt hin, aber das obere Script ist doch schon mal der Weg dahin.

    Später soll das so aussehen:
    eingelesen:
    d:\autoit\muster\test1.au3
    d:\autoit\muster\test2.au3
    d:\autoit\muster\test3.au3
    d:\autoit\muster\test4.au3

    bearbeitet: (grün dazu durch z. B. replace)
    move d:\autoit\muster\test1.au3 e:\autoitneu\muster\test1.au3
    move d:\autoit\muster\test2.au3 e:\autoitneu\muster\test2.au3
    move d:\autoit\muster\test3.au3 e:\autoitneu\muster\test3.au3
    move d:\autoit\muster\test4.au3 e:\autoitneu\muster\test4.au3

    LG, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Das geht ganz einfach, da es als String erstellt wird.
    Kommentiere wie gezeigt aus und du bekommst einen String zurück.

    Spoiler anzeigen
    [autoit]

    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFF_Ret = '', $strFiles = ''
    Local $aOut
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    ; $aOut = StringSplit(StringTrimRight($strFF_Ret,1), @LF)
    ; If $aOut[1] = '' Then
    ; ReDim $aOut[1]
    ; $aOut[0] = 0
    EndIf
    ; Return $aOut
    ; statt dessen:
    Return $strFF_Ret
    EndFunc

    [/autoit]
  • Hallo BugFix.

    Erst einmal: DANKE und KnuBu.

    Bekomme folgende Fehlermeldung:
    E:\test.au3(45,78) : WARNING: $strFF_Ret possibly not declared/created yet
    If ($Dir = -1) Or ($Dir = 1) Then $strFF_Ret &= $Subfolder.Path & @LF
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    E:\test.au3(51,54) : WARNING: $strFiles possibly not declared/created yet
    $strFiles &= $file.Path & @LF
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    E:\test.au3 - 0 error(s), 2 warning(s)


    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo GTA.

    Hier wird ja auch in ein Fenster geschrieben. Ich möchte gerne in eine Txt-Datei das Ergebnis haben, damit ich es wie unter Beitragnummer 5 (?) weiter bearbeiten kann. Sprich ich möchte später etwas davor und dahinter setzen.

    Gruß, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Okay ?(:?:?(

    Ich glaube wir sind der Lsg. sehr nahe, oder?

    Zu 1)
    Was muss ich machen, damit ich die nicht ignoriere?

    zu 2)
    Wie erfolgt die Ausgabe denn in die test.txt?
    SO ?

    Spoiler anzeigen
    [autoit]


    $file = FileOpen("test.txt", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    FileWrite($file, $ret)
    FileClose($file)

    [/autoit]


    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo BugFix.

    Ich dachte immer, was man Warnungen beachten muss. Aber wenn Du sagst: INGOR. Okay, dann ignoriere ich es.

    Naja, das schreiben in die Datei kappppppt super. Muss nur @LF durch @CRLF ersetzen, da sonst die Bearbeitung nicht geht und er alles in eine Zeile schreibt. Aber das ist wohl eine Sache von Windows.

    Nun sollte ich die anderen Sachen (Text vor jede Zeile der Textdatei schreiben und Text hinter jede Zeiler der Textdatei schreiben) auch irgendwie hin bekommen. Ist ja jedes mal der gleiche Text der davor kommt und dahinter. Siehst Du ja am Beispiel das ich oben geschrieben habe. Mal das Script schreiben und dann aufrufen lassen.

    Danke nochmals !!!

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Crazy-A (26. Juni 2008 um 16:18)

  • 1 Fehler gefunden.
    Dieses passiert nur, wenn man das Script von der Root aus startet, da es da wohl kein '..' mnöglich ist, oder?

    1.) mit dir *.* /s >dosdir.txt kommt dieses raus, also auch das aktuelles Verzeichnis:

    Spoiler anzeigen
    [autoit]


    26.06.2008 17:02 0 dosdir.txt
    26.06.2008 17:00 2.555 test.txt
    26.06.2008 16:21 2.173 _GetFilesFolder_Rekursiv.au3
    26.06.2008 17:00 2.826 _GetFilesFolder_Rekursiv_BSP.au3

    [/autoit] [autoit][/autoit] [autoit]

    Verzeichnis von E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003

    [/autoit] [autoit][/autoit] [autoit]

    26.06.2008 14:50 534.519 De10.exe
    26.06.2008 14:56 265.285 De11.exe
    25.05.2008 02:21 65 De12.ini
    26.06.2008 14:55 0 De13.txt
    26.06.2008 14:57 0 De14.txt
    26.06.2008 15:00 2.723 De15.au3
    25.04.2008 14:37 10.752 De16.db
    26.06.2008 15:06 2.722 De17.au3
    26.06.2008 15:14 5.918 De18.au3
    26.06.2008 15:23 7.063 De19.au3
    26.06.2008 15:11 368.660 De20.zip
    26.06.2008 15:50 774 De21.txt
    26.06.2008 15:51 387 De22.txt
    26.06.2008 16:11 1.093 De23.txt
    26.06.2008 16:16 0 De24.txt
    26.06.2008 16:16 1.242 De25.txt
    26.06.2008 16:22 2.596 De26.txt
    26.06.2008 16:22 1.374 De27.txt
    26.06.2008 16:24 1.440 De28.txt
    26.06.2008 16:22 268.899 De29.exe
    26.06.2008 16:15 2.858 De30.au3
    26.06.2008 16:21 2.173 De31.au3
    26.06.2008 16:25 3.010 De32.au3
    26.06.2008 16:25 1.638 De33.txt
    26.06.2008 16:30 1.936 De34.txt
    26.06.2008 16:35 265.369 De35.exe
    26.06.2008 16:36 582 De36.txt
    26.06.2008 16:35 265.369 De37.exe
    26.06.2008 16:55 582 De38.txt
    26.06.2008 16:56 1.182 De39.txt
    26.06.2008 16:57 591 De40.txt
    26.06.2008 16:58 691 De41.txt
    26.06.2008 16:59 3.155 De42.txt
    26.06.2008 16:59 2.530 De43.txt
    26.06.2008 17:01 2.347 De44.txt
    26.06.2008 14:57 4.820 De7
    26.06.2008 14:56 2.572 De8.au3
    26.06.2008 14:56 2.724 De9.au3

    [/autoit]

    2.) Mit dem von Bugfix fehlt das aktuelle Verzeichnis:

    Spoiler anzeigen
    [autoit]


    E:\RECYCLER
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De10.exe
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De11.exe
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De12.ini
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De13.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De14.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De15.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De16.db
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De17.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De18.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De19.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De20.zip
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De21.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De22.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De23.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De24.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De25.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De26.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De27.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De28.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De29.exe
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De30.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De31.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De32.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De33.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De34.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De35.exe
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De36.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De37.exe
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De38.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De39.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De40.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De41.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De42.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De43.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De44.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De45.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De46.txt
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De7
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De8.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\De9.au3
    E:\RECYCLER\S-1-5-21-448539723-261903793-839522115-1003\INFO2
    E:\System Volume Information

    [/autoit]


    Wieso der Unterschied ???

    Script sieht derzeitig so aus:

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>
    $ret = _GetFilesFolder_Rekursiv('.', -1,-1,1)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
    Else
    ;ConsoleWrite($ret & @CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Ergebnis in Datei mit dem Namen test.txt schreiben
    $file = FileOpen("test.txt", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Error", "Fehler.")
    Exit
    EndIf
    FileWrite($file, $ret)
    FileClose($file)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=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 (Einträge @LF-getrennt)
    ; 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)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFF_Ret = '', $strFiles = ''
    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)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFF_Ret,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFF_Ret,1)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    For $Subfolder in $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFF_Ret &= $Subfolder.Path & @LF
    If ($Dir = -1) Or ($Dir = 0) Then
    $files = $Subfolder.Files
    For $file In $files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    $strFF_Ret &= $strFiles
    $strFiles = ''
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]

    Kann man das aktuelle Verzeichnis, da wo das Script sich befindet mit auflisten?
    Mach ich in Zeile 2 stat einem Punkt zwei Punkte, nimmt er alles ab dem übergeordneten Ordner, aber leider nicht den aktuellen Ordner.
    Wenn es nicht möglich ist, wäre das nicht schlimm, denn dann kommt einfach alles in einen Ordner den ich anlege und dann führe ich das Script aus. Ist eine Anregung, okay?

    Vielen Dank für die Hilfe !!!

    LG, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    3 Mal editiert, zuletzt von Crazy-A (27. Juni 2008 um 02:17)

    • Offizieller Beitrag

    Bugfix, Du durchsuchst nur die Unterverzeichnisse des übergebenen Verzeichnisses, nicht aber das übergebene Verzeichnis selbst.
    Ich habe die Funktion mal etwas umgeschrieben:

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>
    $ret = _GetFilesFolder_Rekursiv(@ScriptDir & '\', 'au3', 0, 1)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
    Else
    MsgBox(0, 'Rekursiv alle au3-Dateien', $ret & @CRLF)
    ConsoleWrite($ret & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=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 (Einträge @LF-getrennt)
    ; 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)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    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)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    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 & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]

    So wird auch das übergebene Verzeichnis durchsucht.

    Ansonsten war das sehr hilfreich. Habe das nämlich gerade gebraucht (AIPM). :thumbup:

  • jepp, so funktioniert es auch im aktuellen verzeichnissssss.

    bugfix & oscar haben das super gemacht.

    glg, crazy-a.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo BugFix.

    Sag mal, bist Du böse mit mir wegen dem Posting vom Donnerstag, 26. Juni 2008, 16:02 (hier)?
    Hoffe nicht, aber Du hast es ja nun auch selber als Variablen deklariert.

    Okay, wenn sorry und LG.

    Crazy-A

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl