Ordner in Laufwerk suchen...

  • Hallo.

    Es gibt zwar den Beitrag "Ordner in Laufwerk suchen...", aber da kann ich auf einmal nicht mehr posten.

    Also ich habe eine Datei "gepackt.exe", die soll per Script in den Ordner "gepacktdat" auf Laufwerk-C (genauerer Pfad nicht bekannt) verschoben werden.

    Da komme ich aber einfach nicht weiter, wie ich das machen soll. move to ...... Aber vorher soll ja der Ordner gesucht werden und dann dort die Datei hinkopiert werden.

    Vllt. habe ich mich ja nun zu nächtlicher Stunde besser ausgedrückt.

    LG, Lina.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi Lina,

    ich mache es so ...

    Spoiler anzeigen
    [autoit]

    $sFullPath = _FolderSearch('C:', 'oobe')

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

    MsgBox(4096, 'Suchergebnis', $sFullPath)

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

    Func _FolderSearch($sPfad, $sSuche)

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

    $sSuche = '\' & $sSuche
    Local $Text = ''
    Local $Found

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

    $PID = Run(@ComSpec & ' /c DIR ' & $sPfad & '* /A:D /B /S', $sPfad, @SW_HIDE, $STDOUT_CHILD)

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

    While 1
    $Text = StdoutRead($PID)
    If @error Then
    ExitLoop
    ElseIf StringInStr($Text, $sSuche, 1, 1) Then
    If StringCompare(StringRight($Text, StringLen($sSuche)), $sSuche, 1) Then ExitLoop
    EndIf
    WEnd

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

    Return $Text

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

    EndFunc ;==>_FolderSearch

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


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (5. April 2008 um 03:03)

  • Hallo.

    @GTA = Ja, der Ordner soll gesucht werden und dann dort die Datei gepackt.exe gestartet werden. Also dort hin kopieren und dort starten.

    Greenhorn = Bekomme, wenn ich es starte bei mir folgendes unten bei SciTE angezeigt (Fehlermeldung):

    Spoiler anzeigen
    [autoit]


    >"C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\tteesstt.au3" /autoit3dir "C:\Programme\AutoIt3" /UserParams
    +>12:59:30 Starting AutoIt3Wrapper v.1.9.4
    >Running AU3Check (1.54.10.0) from:C:\Programme\AutoIt3
    C:\tteesstt.au3(11,96) : WARNING: $STDOUT_CHILD: possibly used before declaration.
    $PID = Run(@ComSpec & ' /c DIR ' & $sPfad & '* /A:D /B /S', $sPfad, @SW_HIDE, $STDOUT_CHILD)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\tteesstt.au3(11,96) : ERROR: $STDOUT_CHILD: undeclared global variable.
    $PID = Run(@ComSpec & ' /c DIR ' & $sPfad & '* /A:D /B /S', $sPfad, @SW_HIDE, $STDOUT_CHILD)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\tteesstt.au3 - 1 error(s), 1 warning(s)
    !>12:59:30 AU3Check ended.rc:2
    >Running:(3.2.10.0):C:\Programme\AutoIt3\autoit3.exe "C:\tteesstt.au3"
    C:\tteesstt.au3 (11) : ==> Variable used without being declared.:
    $PID = Run(@ComSpec & ' /c DIR ' & $sPfad & '* /A:D /B /S', $sPfad, @SW_HIDE, $STDOUT_CHILD)
    $PID = Run(@ComSpec & ' /c DIR ' & $sPfad & '* /A:D /B /S', $sPfad, @SW_HIDE, ^ ERROR

    [/autoit]

    BugFix hat dieses Script geschrieben und den Pfad in eine MsgBox geleitet. Hier wäre eigentlich nur statt der Ausgabe in die MsgBox ein "goto zum gefundenen Ordner" notwendig, dort die gepackt.exe (befindet sich im selben Ordner wie dieser Script späte) rein moven und starten. Aber das bekomme ich einfach nicht hin.

    Hier BugFix Script (bitte löschen, wenn er nicht gepostet werden darf)

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

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

    $StartPfad = "C:\"
    $SuchOrdner = "ORDNER-NAME"

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

    $Daten = _GetFileList($StartPfad, "n",1) ; erzeugt Array mit allen Ordnernamen
    $ret = _ArraySearch($Daten, $SuchOrdner,1,0,0,True) ; durchsucht nach Ordner
    If $ret > 0 Then MsgBox(0, '', $Daten[$ret]) ; gibt den kpl.Pfad zurück

    [/autoit] [autoit][/autoit] [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
    ;
    ;********************************************************************************
    ;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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") > 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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") = 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]

    Dachte es so:
    If $ret > 0 Then copy gepackt.exe to $Daten[$ret] and start gepackt.exe.

    Bin ich zu blond? Ja! ;)

    LG und danke das Ihr da seit.

    Lina.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    2 Mal editiert, zuletzt von Alina (5. April 2008 um 13:20)

    • Offizieller Beitrag

    Probier mal das:

    Spoiler anzeigen
    [autoit]

    Global $sourcePath = @ScriptDir
    Global $application = '\gepackt.exe'
    Global $SuchOrdner = 'zu suchender Ordner'
    Global $Daten = _GetFileList($StartPfad, "n",1) ; erzeugt Array mit allen Ordnernamen
    Global $ret = _ArraySearch($Daten, $SuchOrdner,1,0,0,True) ; durchsucht nach Ordner
    ;~ If $ret > 0 Then MsgBox(0, '', $Daten[$ret]) ; gibt den kpl.Pfad zurück
    If $ret > 0 Then
    FileCopy($sourcePath & $application, $Daten[$ret] & $application, 1) ; EXE in gefundenen Ordner kopieren
    Run($Daten[$ret] & $application)
    Else
    MsgBox(0, 'Fehler', 'Ordner nicht vorhanden')
    EndIf

    [/autoit]
  • Hallo BugFix.

    Ich bekomme folgende Fehlermeldung:

    C:\beispiel.au3(5,40) : WARNING: $StartPfad: possibly used before declaration.
    Global $Daten = _GetFileList($StartPfad,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\beispiel.au3(5,40) : ERROR: $StartPfad: undeclared global variable.
    Global $Daten = _GetFileList($StartPfad,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\beispiel.au3(5,47) : ERROR: _GetFileList(): undefined function.
    Global $Daten = _GetFileList($StartPfad, "n",1)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\beispiel.au3 - 2 error(s), 1 warning(s)


    LG, Lina.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Hallo

    ..

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    $StartPfad = "C:\"
    $SuchOrdner = "ORDNER-NAME"
    $application = @ScriptDir&"\app.exe"
    Global $Daten = _GetFileList($StartPfad, "n",1) ; erzeugt Array mit allen Ordnernamen
    Global $ret = _ArraySearch($Daten, $SuchOrdner,1,0,0,True) ; durchsucht nach Ordner
    If $ret > 0 Then
    FileCopy($StartPfad & $application, $Daten[$ret] & $application, 1) ; EXE in gefundenen Ordner kopieren
    Run($Daten[$ret] & $application)
    Else
    MsgBox(0, 'Fehler', 'Ordner nicht vorhanden')
    EndIf

    [/autoit] [autoit][/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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") > 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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") = 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]

    Mfg Spider

  • Hallo GTA.

    Also ich habe das Script von Dir unter c:\beispiel.au3 gespeichert und die Daten angepaßt.
    die gepackt.exe liegt auf c:\gepackt.exe
    Der Ordner "gepacktdat" liegt bei mir zum Beispiel hier: c:\eigene Dateien /1/3/5/gepacktdat. Aber wie geschrieben, bei mir und das ist bei jedem User anders.

    Aber ich bekomme folgende "Fehler/- Meldung"

    C:\beispiel.au3 (9) : ==> Unable to execute the external program.:
    Run($Daten[$ret] & $application)
    Das System kann die angegebene Datei nicht finden.

    Das angepaßte Script sieht so aus:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    $StartPfad = "C:\"
    $SuchOrdner = "gepacktdat"
    $application = @ScriptDir&"\gepackt.exe"
    Global $Daten = _GetFileList($StartPfad, "n",1) ; erzeugt Array mit allen Ordnernamen
    Global $ret = _ArraySearch($Daten, $SuchOrdner,1,0,0,True) ; durchsucht nach Ordner
    If $ret > 0 Then
    FileCopy($StartPfad & $application, $Daten[$ret] & $application, 1) ; EXE in gefundenen Ordner kopieren
    Run($Daten[$ret] & $application)
    Else
    MsgBox(0, 'Fehler', 'Ordner nicht vorhanden')
    EndIf

    [/autoit] [autoit][/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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") > 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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") = 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]

    Wenn ich die beispiel.au3 compilet habe (Ergebnis: beispiel.exe), dann bekomme ich folgendes Fenster:
    autoit.de/wcf/attachment/2141/

    Bilder

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Beachtet bitte, dass FileFindNextFile sehr, sehr, sehr langsam ist, sobald Du etwas tiefer graben musst !!!

    Wenn Du ein ganzes Laufwerk durchsuchen willst, dann nimm lieber 'Dir' !!!
    Es fehlte

    [autoit]

    #include <Constants.au3>

    [/autoit]


    Gruß
    Greenhorn

    EDIT:

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <Constants.au3>

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

    $sFullPath = _FolderSearch('C:', 'oobe')

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

    MsgBox(4096, 'Suchergebnis', $sFullPath)

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

    ;==================================================================================================
    ; _FolderSearch($sPfad, $sSuche)
    ;==================================================================================================
    Func _FolderSearch($sPfad, $sSuche)

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

    $sSuche = '\' & $sSuche
    Local $sLine

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

    $PID = Run(@ComSpec & ' /c DIR ' & $sPfad & ' * /A:D /B /S ', $sPfad, @SW_HIDE, $STDOUT_CHILD)

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

    While 1
    $sLine = StdoutRead($PID)
    If @error Then ExitLoop

    If StringInStr($sLine, $sSuche, 1) Then
    If StringCompare(StringRight($sLine, StringLen($sSuche)), $sSuche, 1) = 0 Then Return $sLine
    EndIf
    WEnd

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

    EndFunc ;==>_FolderSearch

    [/autoit]


    Einmal editiert, zuletzt von Greenhorn (5. April 2008 um 17:51)

    • Offizieller Beitrag

    Hallo,

    ich hatte mir da auch mal eine Funktion geschrieben, probiers mal so!

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #Include <File.au3>
    #Include <Array.au3>
    #Include <Date.au3>

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

    Const $cszApplication = "gepackt.exe"

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

    Local $aszDS[1][2] = [ [ "gepacktdat", "C:\" ] ]

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

    $aszPath = _DirSearch($aszDS)
    If Not @error And IsArray($aszPath) Then
    Select
    Case $aszPath[0] = 0
    MsgBox(0, "", "Kein Verzeichnis auf dem Laufwerk gefunden!")

    Case $aszPath[0] > 1
    _ArrayDisplay($aszPath, "Der Ordner existiert mehrmals auf dem Laufwerk!")
    Exit

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

    Case $aszPath[0] = 1
    $szDestPath = $aszPath[1]
    EndSelect
    EndIf

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

    MsgBox(0, "", $szDestPath)

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

    FileCopy(@ScriptDir & "\" & $cszApplication, $szDestPath & "\", 1) ; EXE in gefundenen Ordner kopieren
    Run($szDestPath & "\" & $cszApplication, $szDestPath)

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

    ; =================================================================================================
    ; Function Name: _DirSearch()
    ; Description: Sucht Verzeichnisse rekursiv in angegebenen Verzeichnissen
    ; Parameter(s): $aszSuche = Array mit folgendem Inhalt
    ; $aszSuche[n][0] = Verzeichnisname nach dem gesucht werden soll
    ; $aszSuche[n][0] = Startverzeichnis in dem gesucht werden soll
    ; $iBase = Startindex für $aszSuche (Vorgabe = 0)
    ; Return Value(s): Erfolg: (@error = 0) -> Array mit den Pfaden zu den gefundenen Ordnern zurück
    ; Array[0] = 0 -> keine Ordern gefunden
    ;
    ; Fehler: @error = 1 -> $aszSuche ist kein Array
    ; @error = 2 -> $aszSuche ist kein 2-Dimensioales Array
    ; @error = 3 -> $aszSuche enthält eine Leerstring
    ; Author(s): bernd670
    ;==================================================================================================
    Func _DirSearch($aszSuche, $iBase = 0)
    Local $szStOut = ""
    Local $aResult[1] = [0]
    Local $aszWD[1]
    Local $aszPattern[1][2]

    If IsArray($aszSuche) Then
    If UBound($aszSuche,0) <> 2 Then Return SetError(2,0,$aResult)
    ReDim $aszPattern[UBound($aszSuche)][2]
    $aszWD[0] = ""
    For $cIndex = $iBase To UBound($aszSuche) - 1
    If (StringLen($aszSuche[$cIndex][0]) = 0) Or (StringLen($aszSuche[$cIndex][1]) = 0) Then SetError(3,0,$aResult)
    If Not StringInStr($aszWD[0],StringLeft($aszSuche[$cIndex][1],2)) Then $aszWD[0] &= StringLeft($aszSuche[$cIndex][1],2)
    If StringLeft($aszSuche[$cIndex][0],1) <> "\" Then $aszSuche[$cIndex][0] = "\" & $aszSuche[$cIndex][0]
    $aszPattern[$cIndex][0] = _StringToPattern($aszSuche[$cIndex][0])
    If StringRight($aszSuche[$cIndex][1],1) = "\" Then $aszSuche[$cIndex][1] = StringTrimRight($aszSuche[$cIndex][1],1)
    $aszPattern[$cIndex][1] = _StringToPattern($aszSuche[$cIndex][1])
    Next
    $cWDLen = StringLen($aszWD[0])
    if $cWDLen > 2 Then
    ReDim $aszWD[$cWDLen / 2]
    For $cIndex = $cWDLen - 1 To 1 Step -2
    $aszWD[Floor($cIndex / 2)] = StringMid($aszWD[0],$cIndex,2)
    Next
    EndIf
    Else
    SetError(1,0,$aResult)
    EndIf

    For $cIndex = 0 To UBound($aszWD) - 1
    $PID = Run(@ComSpec & " /c DIR * /A:D /B /S", $aszWD[$cIndex] & "\", @SW_HIDE, $STDOUT_CHILD)

    While 1
    $szStOut &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd
    Next
    $szStOut = StringSplit(OemToChar($szStOut), @CRLF, 1)

    For $cZeile = 1 To $szStOut[0]
    For $cIndex = 0 To UBound($aszPattern) - 1
    If StringRegExp($szStOut[$cZeile],"(?i)^(" & $aszPattern[$cIndex][1] & ".*" & $aszPattern[$cIndex][0] & ")$") Then
    if UBound($aResult) <= ($aResult[0] + 1) Then ReDim $aResult[UBound($aResult) + 100]
    $aResult[0] += 1
    $aResult[$aResult[0]] = $szStOut[$cZeile]
    EndIf
    Next
    Next
    ReDim $aResult[$aResult[0]+1]

    Return SetError(0,0,$aResult)
    EndFunc ;==>_DirSearch

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

    ; =================================================================================================
    ; Function Name: _FileSearch()
    ; Description: Sucht Dateien rekursiv in angegebenen Verzeichnissen
    ; Parameter(s): $aszSuche = Array mit folgendem Inhalt
    ; $aszSuche[n][0] = Dateiname nach dem gesucht werden soll
    ; $aszSuche[n][0] = Startverzeichnis in dem gesucht werden soll
    ; $iBase = Startindex für $aszSuche (Vorgabe = 0)
    ; Return Value(s): Erfolg: (@error = 0) -> Array mit den Pfaden zu den gefundenen Dateien zurück
    ; Array[0] = 0 -> keine Datei gefunden
    ;
    ; Fehler: @error = 1 -> $aszSuche ist kein Array
    ; @error = 2 -> $aszSuche ist kein 2-Dimensioales Array
    ; @error = 3 -> $aszSuche enthält eine Leerstring
    ; Author(s): bernd670
    ;==================================================================================================
    Func _FileSearch($aszSuche, $iBase = 0)
    Local $szStOut = ""
    Local $aResult[1] = [0]
    Local $aszWD[1]
    Local $aszPattern[1][2]

    If IsArray($aszSuche) Then
    If UBound($aszSuche,0) <> 2 Then Return SetError(2,0,$aResult)
    ReDim $aszPattern[UBound($aszSuche)][2]
    $aszWD[0] = ""
    For $cIndex = $iBase To UBound($aszSuche) - 1
    If (StringLen($aszSuche[$cIndex][0]) = 0) Or (StringLen($aszSuche[$cIndex][1]) = 0) Then SetError(3,0,$aResult)
    If Not StringInStr($aszWD[0],StringLeft($aszSuche[$cIndex][1],2)) Then $aszWD[0] &= StringLeft($aszSuche[$cIndex][1],2)
    If StringLeft($aszSuche[$cIndex][0],1) <> "\" Then $aszSuche[$cIndex][0] = "\" & $aszSuche[$cIndex][0]
    $aszPattern[$cIndex][0] = _StringToPattern($aszSuche[$cIndex][0])
    If StringRight($aszSuche[$cIndex][1],1) = "\" Then $aszSuche[$cIndex][1] = StringTrimRight($aszSuche[$cIndex][1],1)
    $aszPattern[$cIndex][1] = _StringToPattern($aszSuche[$cIndex][1])
    Next
    $cWDLen = StringLen($aszWD[0])
    if $cWDLen > 2 Then
    ReDim $aszWD[$cWDLen / 2]
    For $cIndex = $cWDLen - 1 To 1 Step -2
    $aszWD[Floor($cIndex / 2)] = StringMid($aszWD[0],$cIndex,2)
    Next
    EndIf
    Else
    SetError(1,0,$aResult)
    EndIf

    For $cIndex = 0 To UBound($aszWD) - 1
    $PID = Run(@ComSpec & " /c DIR * /A:-D /B /S", $aszWD[$cIndex] & "\", @SW_HIDE, $STDOUT_CHILD)

    While 1
    $szStOut &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd
    Next
    $szStOut = StringSplit(OemToChar($szStOut), @CRLF, 1)

    For $cZeile = 1 To $szStOut[0]
    For $cIndex = 0 To UBound($aszPattern) - 1
    If StringRegExp($szStOut[$cZeile],"(?i)^(" & $aszPattern[$cIndex][1] & ".*" & $aszPattern[$cIndex][0] & ")$") Then
    if UBound($aResult) <= ($aResult[0] + 1) Then ReDim $aResult[UBound($aResult) + 100]
    $aResult[0] += 1
    $aResult[$aResult[0]] = $szStOut[$cZeile]
    EndIf
    Next
    Next
    ReDim $aResult[$aResult[0]+1]

    Return SetError(0,0,$aResult)
    EndFunc ;==>_FileSearch


    ;=======================================================================================


    ;===============================================================================
    ; Name: OemToChar
    ; Description: Wandelt einen ASCII- in einen ANSI-String
    ; Parameter(s): $szSrc = String der umgewandelt werden soll
    ; Requirement(s): keine
    ; Return Value(s): bei Erfolg: umgewandelter String
    ; bei Fehler: "" und @error = 1
    ; Author(s): bernd670
    ;===============================================================================
    Func OemToChar($szSrc)
    ;~ Private Declare Function OemToChar Lib "user32.dll" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    Local $strSrc = DllStructCreate("char[" & StringLen($szSrc) + 1 & "]")
    Local $strDst = DllStructCreate("char[" & StringLen($szSrc) * 2 + 1 & "]")
    DllStructSetData($strSrc,1,$szSrc)
    DllStructSetData($strDst,1,0)

    Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($strSrc), "ptr", DllStructGetPtr($strDst))
    If IsArray($lRetVal) And $lRetVal[0] = 1 Then
    Return SetError(0,0,DllStructGetData($strDst,1))
    EndIf

    Return SetError(1,0,"")
    EndFunc ;==>OemToChar


    ;===============================================================================
    ; Name: _StringToPattern
    ; Description: Bereitet einen String für eine StringRegExp-Pattern vor
    ; Parameter(s): $szStrToPattern = String der umgewandelt werden soll
    ; Requirement(s): keine
    ; Return Value(s): umgewandelter String
    ; Author(s): bernd670
    ;===============================================================================
    Func _StringToPattern($szStrToPattern)
    $szStrToPattern = StringReplace($szStrToPattern, "\", "\\")
    $szStrToPattern = StringReplace($szStrToPattern, ".", "\.")
    $szStrToPattern = StringReplace($szStrToPattern, "+", "\+")
    $szStrToPattern = StringReplace($szStrToPattern, "-", "\-")
    $szStrToPattern = StringReplace($szStrToPattern, "(", "\(")
    $szStrToPattern = StringReplace($szStrToPattern, ")", "\)")
    $szStrToPattern = StringReplace($szStrToPattern, "[", "\[")
    $szStrToPattern = StringReplace($szStrToPattern, "]", "\]")
    $szStrToPattern = StringReplace($szStrToPattern, "?", ".")
    $szStrToPattern = StringReplace($szStrToPattern, "*", ".*")

    Return $szStrToPattern
    EndFunc ;==>_StringToPattern

    [/autoit]
  • Hallo zusammen.

    Ui, da habe ich doch noch eine Frage zu diesem Script:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    $StartPfad = "C:\"
    $SuchOrdner = "gepacktdat"
    $application = @ScriptDir&"\gepackt.exe"
    Global $Daten = _GetFileList($StartPfad, "n",1) ; erzeugt Array mit allen Ordnernamen
    Global $ret = _ArraySearch($Daten, $SuchOrdner,1,0,0,True) ; durchsucht nach Ordner
    If $ret > 0 Then
    FileCopy($StartPfad & $application, $Daten[$ret] & $application, 1) ; EXE in gefundenen Ordner kopieren
    Run($Daten[$ret] & $application)
    Else
    MsgBox(0, 'Fehler', 'Ordner nicht vorhanden')
    EndIf

    [/autoit] [autoit][/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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") > 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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") = 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]

    Im Script heißt es: $StartPfad = "C:\" und beschränkt somit die Suche auf HDD-C. Was muß ich wie ändern, damit es auch für HDD-D, HDD-E und HDD-F Gültigkeit hat.
    Hatte überlegt es für jedes Laufwerk als eine einzelne Datei zu machen, aber da gibt es doch sicherlich eine bessere Lösung, oder?

    LG, L I N A.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Bug? Wie bau ich das richtig ein? Das würde ja gleich einige andere Probleme lösen, die ich noch so offen habe. Habe einige Projekte zur Seite geschoben, weil ich diese Möglichkeit immer gesucht habe.

    LG, Lina.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ui, habe es so gemacht:

    Spoiler anzeigen
    [autoit]

    Const $B3 = FileSelectFolder("Laufwerk aussuchen. Laufwerk heißt nicht Ordner. ;) ", "") ;"C:\" ; Laufwerk wo installiert wird

    [/autoit]


    So umgehe ich die Überlegung, ob man auch Ordner auswählen darf. Es soll ja der Laufwerksbuchstabe ausgewählt werden und ab da soll in meinem Fall gesucht werden.

    Danke BugFix.

    LG, L I N A.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Wenn Du nur das Laufwerk haben willst, dann nimm doch das hier:

    [autoit]


    #Include <GUIConstants.au3>

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

    $Gui = GUICreate('Beispiel', 200, 100)
    GuiCtrlCreateLabel('Bitte Laufwerk auswählen:', 10, 25, 130, 30)
    $Combo = GUICtrlCreateCombo('', 150, 20, 50, 30, $CBS_DROPDOWNLIST)
    $Drives = DriveGetDrive('Fixed')
    $DrivesCombo = ''
    For $i = 1 To $Drives[0]
    $DrivesCombo &= StringUpper($Drives[$i]) & '\|'
    Next
    GUICtrlSetData($Combo, $DrivesCombo, $Drives[1] & '\')

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo
    $Drive = GUICtrlRead($Combo)
    ExitLoop
    EndSwitch
    WEnd

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

    MsgBox(0, '', $Drive)

    [/autoit]
  • Oscar .

    Also das muß ich mir jetzt mal ausdrucken und auf dem Sofa im wahrsten "Sinnde" durch den Kopf gehen lassen. ;)

    Nein, probiere ich morgen mal aus es in das Script einzuarbeiten.

    Irgendwie war ich die ganze Zeit am herumversuchen, wie man das mit FileSelectFolder lösen könnte, aber bin auf nichts gekommen.

    So, Drucker an, ausdrucken, PC aus und ab noch 30 Minuten aufs Sofa, bevor es denn zum nächtlichen, siebenstündigen Horizontaltraining geht.

    LG, Lina

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hallo Oscar.

    Also von der Idee her super, aber das einbauen in mein Script (siehe Post Gestern, 20:04) bekomme ich noch nicht hin.
    Aber ich speichere es mir dennoch ab.

    LG und schönen Dienstag. Bei mir toben jetzt die Handwerker.

    L I N A

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Ich habe mein Beispiel mal in das obige Script integriert:

    Spoiler anzeigen
    [autoit]


    #Include <GUIConstants.au3>
    #include <array.au3>

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

    $Gui = GUICreate('Beispiel', 200, 100)
    GuiCtrlCreateLabel('Bitte Laufwerk auswählen:', 10, 25, 130, 30)
    $Combo = GUICtrlCreateCombo('', 140, 20, 50, 30, $CBS_DROPDOWNLIST)
    $Drives = DriveGetDrive('Fixed')
    $DrivesCombo = ''
    For $i = 1 To $Drives[0]
    $DrivesCombo &= StringUpper($Drives[$i]) & '\|'
    Next
    GUICtrlSetData($Combo, $DrivesCombo, $Drives[1] & '\')
    $Ok = GUICtrlCreateButton('Ok', 70, 70, 60, 20)
    $Wait = GUICtrlCreateLabel('Bitte warten!', 35, 70, 150, 20)
    GUICtrlSetFont(-1, 16, 800, 0, 'Times New Roman')
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW, $Gui)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $Combo Or $msg = $Ok
    GUICtrlSetState($ok, $GUI_HIDE)
    GUICtrlSetState($Wait, $GUI_SHOW)
    ExitLoop
    EndSelect
    WEnd

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

    $StartPfad = GUICtrlRead($Combo)
    $SuchOrdner = "gepacktdat"
    $application = @ScriptDir & "\gepackt.exe"
    Global $Daten = _GetFileList($StartPfad, "n",1) ; erzeugt Array mit allen Ordnernamen
    Global $ret = _ArraySearch($Daten, $SuchOrdner,1,0,0,True) ; durchsucht nach Ordner
    GUIDelete($Gui)
    If $ret > 0 Then
    FileCopy($StartPfad & $application, $Daten[$ret] & $application, 1) ; EXE in gefundenen Ordner kopieren
    Run($Daten[$ret] & $application)
    Else
    MsgBox(0, 'Fehler', 'Ordner nicht vorhanden')
    EndIf

    [/autoit] [autoit][/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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") > 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 Or _
    StringInStr(FileGetAttrib( $N_TFILE ),"D,H,S") = 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]
  • Hallo Oscar.

    Am frühen MORGEN ein DANK !!!

    Jetzt verstehe ich Dein Script und kann es auch einbauen.

    Merci und LG,

    L I N A

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr