TXT Dateien aus unbekannten Unterverzeichnissen kopieren

  • Hallo zusammen :)

    Ich habe ein Verzeichnis gegeben mit mehreren unbekannten Unterverzeichnissen wo sich mehrere namentlich unbekannte Txt Dateien befinden. Diese TxT Dateien möchte ich nun alle in ein Verzeichnis X kopieren. Meine Idee war nun die ganzen Dateinamen in ein Array einlesen zu lassen, was mit _filelisttoarray wunderbar für das Root Verzeiczhnis funktioniert, aber nicht für UNterverzeichnisse. Mein Freund Google und die Forumssuche konnte mir leider nicht weiterhelfen - gibt es so einen Befehl der auch sämtliche UNterverzeichnisse mit einschliesst bzw. eine andere Möglichkeit das zu lösen?

    Vorab besten Dank :)

    Einmal editiert, zuletzt von LordKingPin (10. August 2011 um 23:22)

  • Ja es gibt mehrere Funktionen dafür, ich habe auch mal eine gemacht (welche allerdings nicht sehr effektiv ist ^^). Such mal nach "Rekursive Dateisuche" oder etwas in der Art ;).
    Das hier wäre übrigens meine Funktion:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    $aFile = _FileListToArrayRecursiv(@UserProfileDir, "*", 0)
    _ArrayDisplay($aFile)

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _FileListToArrayRecursiv()
    ; Description ...: Findet Dateien in einem Verzeichnis und allen Unterverzeichnissen
    ; Syntax ........: _FileListToArrayRecursiv($sPath, [$sFilter = "*"])
    ; Parameters ....: $sPath - Verzeichnispfad in dem gesucht werden soll.
    ; $sFilter - [optional] Dateinamenfilter (z.B. "*.mp3"). Wildcards werden unterstützt.
    ; $iFlag - [optional] 0 = Dateien und Ordner auflisten.
    ; 1 = Nur Dateien auflisten.
    ; 2 = Nur Ordner auflisten.
    ; Return values .: Success - Return Array with Files ($Array[0] = Count)
    ; Failure - Return 0
    ; Author ........: name22 (autoit.de)
    ; Remarks .......: Benötigt #include <File.au3>
    ; =================================================================================================
    Func _FileListToArrayRecursiv($sPath, $sFilter = "*", $iFlag = 0)
    Local $aFiles = _FileListToArray($sPath, $sFilter, $iFlag)
    If Not IsArray($aFiles) Then
    Local $aFiles[1]
    $aFiles[0] = 0
    EndIf

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

    Local $aFolders = _FileListToArray($sPath, "*", 2)
    If Not IsArray($aFolders) Then
    If $aFiles[0] = 0 Then Return 0
    Else
    $bResult = False
    For $i = 1 To $aFolders[0]
    $aSearchTmp = _FileListToArrayRecursiv($sPath & "\" & $aFolders[$i], $sFilter, $iFlag)
    If IsArray($aSearchTmp) Then
    $bResult = True
    ReDim $aFiles[$aFiles[0] + $aSearchTmp[0] + 1]
    For $j = 1 To $aSearchTmp[0]
    $aFiles[$aFiles[0] + $j] = $aFolders[$i] & "\" & $aSearchTmp[$j]
    Next
    $aFiles[0] += $aSearchTmp[0]
    EndIf
    Next
    EndIf

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

    Return $aFiles
    EndFunc

    [/autoit]
  • Was soll ich sagen - Rekursive Suche = Treffer :rock:
    Hab da Testweise fix mal was gebastelt und getestet - geht 1A :)

    Danke für den Anstubser name22 :thumbup:

    C
    #include <Array.au3>
    #include "_RecursiveFileListToArray.au3"
    
    
    $aFiles = _RecursiveFileListToArray(@ScriptDir, '(?i).*txt', 1)
    If IsArray($aFiles) Then
    	For $i = 1 To $aFiles[0]
        	FileCopy($aFiles[$i], "C:\test\ziel")
    	Next
    EndIf