Habe ein Problem mit einer Schleife & FileFind

  • Hallo, ich wollt ein script schreiben was z.B. auf D:\Downloads\
    Liegt und nun 1 Ordnertiefe mehr z.b. D:\Downloads\ATi
    nach einer bestimmten Datei Durchsucht(im script ist es FileInfo.ini)

    Datei Soll später in zu gut wie jedem Unterordner liegen.
    Das script Läuft auch aber wenn ein Ordner die Datei nicht enthält Stop es jedesmal. kann mir hier mal jemand helfen.(das script soll den Ordner Uberspringen bei der Schleife)

    Später möchte ich die Datei mit Iniread mal auslesen.

    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.0.1
    Author: Tiger02

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    HotKeySet("{ESC}", "Terminate")

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

    Func Terminate()
    Exit
    EndFunc ;==>Terminate

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

    #include <GUIConstants.au3>
    Opt('GUICoordMode',1)

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

    $dir=@ScriptDir; <- das dir wo die .ini´s liegen sollen...
    $Ordner=FileFindFirstFile("*.");Gibt alle Ordner aus
    If $Ordner=-1 Then Exit
    While 1
    $file = FileFindNextFile($Ordner)
    $dir=@ScriptDir & '\' & $file
    $files=FileFindFirstFile($Dir & '\FileInfo.ini')
    If $files=-1 Then Exit
    While 1
    $file2=FileFindNextFile($files)
    If @error Then ExitLoop; Abbruch, wenn keine Dateien mehr vohanden sind
    WEnd
    FileClose($files)
    MsgBox(0,'$Dir',$Dir & @LF & $Ordner,10)
    If @error Then ExitLoop; Abbruch, wenn keine Dateien mehr vohanden sind
    WEnd
    FileClose($Dir)
    FileClose($Ordner)

    [/autoit]


    mfg Tiger

    Einmal editiert, zuletzt von Tiger02 (9. September 2006 um 19:36)

  • nunja du hast geschrieben If $Files -1 then Exit
    das heißt das das Script beendet wird
    Falls du die While schleife beenden möchtest schreib Exitloop
    ansonsten schreibst du

    If $Files - 1 then
    else
    endif

    mfg Mirage

  • hallo ich bins nochmal hab mein script nochmal überarbeitet

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.0.1
    Author: Tiger02

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    HotKeySet("{ESC}", "Terminate")

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

    Func Terminate()
    Exit
    EndFunc ;==>Terminate

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

    ;#include <GUIConstants.au3>
    ;Opt('GUICoordMode',1)

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

    $dir=@ScriptDir; <- das Verzeichniss wo das Script Liegt und die UnterOrdner mit den .ini´s...
    $Ordner=FileFindFirstFile("*.");Gibt alle Ordner aus
    $files = 0

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

    If $Ordner=-1 Then
    MsgBox(0,'Fehler','Keine Ordner Vorhanden?'& @LF & 'Im Hauptverzeichnis vom Script.',0)
    Exit
    EndIf

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

    While $Ordner=1
    FileClose($files)
    $file = FileFindNextFile($Ordner)
    $dir = @ScriptDir & '' & $file
    $files = FileFindFirstFile($Dir & 'FileInfo.ini')
    MsgBox(0,'Pfade','Ordner Vorhanden(=1): ' & $Ordner & @LF & 'Pfad mit UnterOrdner: ' & @ScriptDir & '' & @LF & 'Pfad mit UnterOrdner: ' & $Dir & @LF & 'Ordnernamme: ' & $file & @LF & 'FileInfo.ini : ' & $Files & @LF & 'Fehler : ' & @error ,10)
    If $dir = @ScriptDir & '' Then ExitLoop
    If $files=-1 Then ContinueLoop

    WEnd
    ;FileClose($Dir)
    ;FileClose($Ordner)

    [/autoit]

    -jetzt habe ich noch ne frage wie ich alle unterordener duchsuchen kann, bin absoluter anfänger.
    ist die Zeile"$files = FileFindFirstFile($Dir & 'FileInfo.ini')"in der schleife richtig , hatte mit FileFindNextFile probiert, genauso der ausgabewert wert von 2 (baue ich am anfang nicht $files = 0 ein und FileClose($files) zählt der ausgabe wert von Files immer 1+)
    -braucht man am einde immer Fileclose()

    -habe das script mit ordnern angehängt zum testen

    mfg tiger

    Einmal editiert, zuletzt von Tiger02 (5. September 2006 um 21:51)

  • wollte später die dateien per iniread auslesen (jede Datei, im script als Beispiel FileInfo.ini) wenn sie vorhanden sind (habs noch nicht eingebaut). In den Datein sollen später infos für die RunOnceEX.CMD für silent Installationen drinnen stehen. Daher soll das script alle Unterordner mit Durchsuchen.

    mfg Tiger

  • kann mir mal einer einen kleinen denkanstoss geben, wie ich die Schleife erweitere auf alle unterordner.( Die ausgabewerte von dem Array's sind momentan nur zur info für mich welche ordner durchsucht wurden)

    [autoit]


    #include <Array.au3>

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

    $files=0
    Dim $Array1
    Dim $Array2

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

    HotKeySet("{ESC}", "Terminate")
    Func Terminate()
    Exit
    EndFunc ;==>Terminate

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

    $dir=@ScriptDir; <- das Verzeichniss wo das Script Liegt und die UnterOrdner mit den .ini´s...
    $search=FileFindFirstFile("*.");Gibt alle Ordner aus

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

    If $search=-1 Then
    MsgBox(0,'Fehler','Keine Ordner Vorhanden?'& @LF & 'Im Hauptverzeichnis vom Script.',0)
    Exit
    EndIf

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

    While 1
    FileClose($files)
    ;MsgBox(0,'Ordnertests',$search & ' = 1 immer wenn Ordner Vorhanden' & @LF & $Dir,0)
    $search2 = FileFindNextFile($search)
    $dir=@ScriptDir & '\' & $search2
    $files=FileFindFirstFile($Dir & '\FileInfo.ini')
    ;MsgBox(0,'Pfade','Ordner Vorhanden(=1): ' & $search & @LF & '@ScriptDir ' & @ScriptDir & '\' & @LF & 'Pfad mit UnterOrdner: ' & $Dir & @LF & 'Ordnernamme: ' & $search2 & @LF & 'FileInfo.ini : ' & $files ,10)
    MsgBox(0,"Schlüssel",'$search: ' & $search & @LF & '@ScriptDir: ' & @ScriptDir & '\' & @LF & '$DIR: ' & $Dir & @LF & '$search2: ' & $search2 & @LF & '$files: ' & $files ,10)
    If $dir=@ScriptDir & '\' Then ExitLoop
    ;MsgBox(0,"",$dir,10)
    If $files=2 Then
    If (Not IsArray($Array1)) Then
    $Array1 = _ArrayCreate($dir& '\FileInfo.ini')
    Else
    _ArrayAdd( $Array1,$dir& '\FileInfo.ini')
    EndIf
    EndIf
    If $search=1 Then
    If (Not IsArray($Array2)) Then
    $Array2 = _ArrayCreate($dir&"\")
    Else
    _ArrayAdd( $Array2,$dir&"\")
    EndIf
    EndIf
    If $files=-1 Then ContinueLoop
    WEnd

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

    FileClose($Dir)
    ;FileClose($search)
    ;FileClose($search2)
    _ArrayDisplay( $Array2, "Liste Aller UnterOrdner" )
    _ArrayDisplay( $Array1, "Liste Aller UnterOrdner mit Fileinfo.ini" )

    [/autoit]


    mfg tiger

    • Offizieller Beitrag

    Hallo,

    schau dir mal die Funktion _GetFileList() auf http://www.autoitscript.com/forum/index.php?s=472220df0fa5d0128872c2d01cbd1512&showtopic=29669&view=findpost&p=211820 an die dürfte genau das machen!

  • danke Bernd Funktioniert :klatschen:sowoll mit _GetFileList() als auch mit dem Func Search im post #3 auf der Seite


    mfg Tiger