Ordner files nach ordner auflisten

  • Hallo liebe Comunity wollte mal fragen ob folgendes realisierbar ist

    ich habe einen Ordner "test" in diesem befindet sich ein Ordner "teste" (Nur als Beispiel)
    UND IN DIESEM ORDNER SIN DATEIN VON a.txt bis z.txt (natürlich weit mehr)
    jetzt bräuchte ich ein Script welches dann folgendes macht :
    Es liest die Struktr Aus und dann die dateinamen und schreibt das in eine php datei als beispiel

    test\teste\a.txt
    test\teste\b.txt
    test\teste\c.txt
    test\teste\d.txt


    ist das möglich wenn ja mit welchen Funktionen ?

  • In den UDFs unter File Management ... ;)

    [autoit]

    #include <File.au3>

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

    ; WINDOWS = test; system32 = teste ...
    $sPath = 'C:\WINDOWS\system32'

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

    $aFiles = _FileListToArray($sPath, '*.txt', 1) ; 1 = nur Dateien
    ; rest code ...

    [/autoit]


    Gruß


    Einmal editiert, zuletzt von Greenhorn (30. Mai 2008 um 02:35)

  • Dann ist es besser direkt mit FileFindFirstFile und FileFindNextFile zu arbeiten ..., irgendwo hatte ich da glaube ich 'ne UDF, mom ...

    [autoit]

    ; WINDOWS = test; system32 = teste ...
    $sPath = 'C:\WINDOWS\system32'

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

    $aTxtFiles = _GetFileList($sPath,'*.dll')

    [/autoit][autoit][/autoit][autoit][/autoit]
    Spoiler anzeigen
    [autoit]

    ;********************************************************************************
    ; AutoIt Version: 3.0
    ; Language: English
    ; Platform: Win9x/NT/XP
    ; Author: jos van der Zande
    ;
    ; Find files in directory and subdirectories and return it in an Array, all coded in Autoit3
    ;
    ; _GetFileList($DIR, $FILEMASK, 1) ; _GetFileList($DIR, $FILEMASK [, Flag]) Flag GetFile(Default) = 0 , GetDirOnly = 1
    ;********************************************************************************
    ;Recursive search for filemask
    ;********************************************************************************

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

    Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
    Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
    Local $N_DIRCOUNT = 0
    Local $N_FILE
    Local $N_SEARCH
    Local $N_TFILE
    Local $N_OFILE
    Local $T_FILENAMES
    Local $T_FILECOUNT
    Local $T_DIRCOUNT = 1
    Local $FILEMASK
    ; check Filemask \ for empty File-Array by GetDirOnly
    If $FILEMASK = "n" Then $FILEMASK = "*.no"
    ; remove the end \ If specified
    If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
    $N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
    ; Exit if base dir doesn't exists
    If Not FileExists($T_DIR) Then Return 0
    ; keep on looping until all directories are scanned
    While $T_DIRCOUNT > $N_DIRCOUNT
    $N_DIRCOUNT = $N_DIRCOUNT + 1
    ; find all subdirs in this directory and save them in a array
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
    $T_DIRCOUNT = $T_DIRCOUNT + 1
    $N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
    EndIf
    Wend
    FileClose($N_SEARCH) ; find all Files that mtach the MASK
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
    If $N_SEARCH = -1 Then ContinueLoop
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
    $T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
    $T_FILECOUNT = $T_FILECOUNT + 1
    ;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
    EndIf
    Wend
    FileClose($N_SEARCH)
    Wend
    If $DIR_ONLY = 0 Then
    $T_FILENAMES = StringTrimRight($T_FILENAMES,1)
    $N_OFILE = StringSplit($T_FILENAMES,@CR)
    Return( $N_OFILE )
    Else
    ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
    $N_DIRNAMES[0] = $N_DIRCOUNT
    Return $N_DIRNAMES
    EndIf
    EndFunc ;==>_GetFileList

    [/autoit]


    Gruß


    Einmal editiert, zuletzt von Greenhorn (30. Mai 2008 um 02:47)

  • Du kannst die Funktion natürlich auch in dein Script kopieren soviel ist es ja nicht ;)

    Zum prüfen:
    #include <Array.au3>

    _ArrayDisplay($array)

    EDIT:
    Hast Du schon einen Prototypen für dein Script, dann poste es doch bitte mal ?!


    Gruß


  • Dann passiert überhaupnichts

    Spoiler anzeigen
    [autoit]

    #include <FileList.au3>;die udf von dir
    #include <Array.au3>
    ; WINDOWS = test; system32 = teste ...
    $sPath = 'C:\Benutzer\KR\Desktop\KAL'

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

    $aTxtFiles = _GetFileList($sPath,'*.dll')

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

    _ArrayDisplay($aTxtFiles)

    [/autoit]
  • Hierbei nicht ???

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    ; WINDOWS = test; system32 = teste ...
    $sPath = 'C:\WINDOWS\system32'

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

    $aTxtFiles = _GetFileList($sPath,'*.dll')

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

    _ArrayDisplay($aTxtFiles)
    Exit
    ;********************************************************************************
    ; AutoIt Version: 3.0
    ; Language: English
    ; Platform: Win9x/NT/XP
    ; Author: jos van der Zande
    ;
    ; Find files in directory and subdirectories and return it in an Array, all coded in Autoit3
    ;
    ; _GetFileList($DIR, $FILEMASK, 1) ; _GetFileList($DIR, $FILEMASK [, Flag]) Flag GetFile(Default) = 0 , GetDirOnly = 1
    ;********************************************************************************
    ;Recursive search for filemask
    ;********************************************************************************

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

    Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
    Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
    Local $N_DIRCOUNT = 0
    Local $N_FILE
    Local $N_SEARCH
    Local $N_TFILE
    Local $N_OFILE
    Local $T_FILENAMES
    Local $T_FILECOUNT
    Local $T_DIRCOUNT = 1
    Local $FILEMASK
    ; check Filemask \ for empty File-Array by GetDirOnly
    If $FILEMASK = "n" Then $FILEMASK = "*.no"
    ; remove the end \ If specified
    If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
    $N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
    ; Exit if base dir doesn't exists
    If Not FileExists($T_DIR) Then Return 0
    ; keep on looping until all directories are scanned
    While $T_DIRCOUNT > $N_DIRCOUNT
    $N_DIRCOUNT = $N_DIRCOUNT + 1
    ; find all subdirs in this directory and save them in a array
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
    $T_DIRCOUNT = $T_DIRCOUNT + 1
    $N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
    EndIf
    Wend
    FileClose($N_SEARCH) ; find all Files that mtach the MASK
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
    If $N_SEARCH = -1 Then ContinueLoop
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
    $T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
    $T_FILECOUNT = $T_FILECOUNT + 1
    ;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
    EndIf
    Wend
    FileClose($N_SEARCH)
    Wend
    If $DIR_ONLY = 0 Then
    $T_FILENAMES = StringTrimRight($T_FILENAMES,1)
    $N_OFILE = StringSplit($T_FILENAMES,@CR)
    Return( $N_OFILE )
    Else
    ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
    $N_DIRNAMES[0] = $N_DIRCOUNT
    Return $N_DIRNAMES
    EndIf
    EndFunc ;==>_GetFileList

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

    EDIT:
    Sorry, zuviel mitkopiert ..., vllt 'n büschen früh/spät für mich :D


  • #include <File.au3>

    _FileWriteFromArray($File, $a_Array)

    oder

    $file = FileOpen('C:\Text.txt', 2)
    For $i = 1 To $aTxtFiles[0]

    FileWriteLine($file, $aTxtFiles[$i]

    Next
    FileClose($file)

    EDIT:
    Nein, es hängt sich nicht auf sondern dauert dann halt seine Zeit ;)
    Und achte bitte auf die Prozessorlast ...

    Gruß


  • Es kommt doch eine Rückgabe, aber anscheinend enthält der Pfad keine Dateien nach denen Du suchst ...

    Sehe gerade Du benutzt anscheinend noch die alte AutoIt v3.2.10.0, magst nicht upgraden, oder ... ?


    Gruß


  • Eistee, auch wenn das jetzt OT ist, so möchte ich dich darauf hinweisen, dass es auch eine Edit-Funktion gibt. (siehe Bearbeiten bei deinem Post)

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)