Ordnerinhalte auslesen

  • Hallo
    und erstmal ein herzliches neues Jahr!

    Mein erstes Problem im neuen Jahr sieht so aus:

    • Es gibt einen Ordner mit Bildern die ich alle einzeln bearbeiten muß
    • Alle Inhalte sollen im Loop mit Pfad nacheinander ausgelesen werden

    Hier mein Code ohne Loop...
    (habe alle Fehlversuche entfernt)
    hm...das Inputfeld sollte den Pfad zeigen...geht auch nicht


    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Bilder einlesen...", 615, 440, 246, 152)
    $Ordnerwahl = GUICtrlCreateButton("Ordnerwahl", 440, 36, 119, 49)
    $Start = GUICtrlCreateButton("Start", 444, 220, 115, 61)
    $Anzeige = GUICtrlCreateCombo("Anzeige", 444, 180, 117, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "jpg|png")
    $Ablageordner = GUICtrlCreateButton("Ablageordner", 440, 96, 119, 49)
    $Quelle = GUICtrlCreateInput("Quelle", 48, 52, 381, 21)
    $Label1 = GUICtrlCreateLabel("Quellordner", 48, 28, 58, 17)
    $Label2 = GUICtrlCreateLabel("Zielordner", 48, 88, 51, 17)
    $Ziel = GUICtrlCreateInput("Ziel", 48, 108, 385, 21)
    $Label3 = GUICtrlCreateLabel("Welche Formate sollen gelesen werden?", 232, 188, 196, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Ordnerwahl
    $Quellordner = FileSelectFolder("Bitte Ordner wählen","",Default,@ScriptDir)

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

    If @error Then Exit
    Case $Ablageordner
    $Zielordner = FileSelectFolder("Bitte neuen Ordner wählen","",Default,@ScriptDir)
    If @error Then Exit

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

    Case $Start

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

    $Einlesen = MsgBox(4,"","Sollen alle "&GUICtrlRead($Anzeige)& " Dateien eingelesen werden?")
    If $Einlesen=6 Then

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

    Else
    MsgBox(4096,"Abbruch","Daten wurden nicht eingelesen")

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

    endif

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

    EndSwitch
    WEnd

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

    würd mich freuen, wenn die Profis mal drüberschauen

    Viele Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (3. Januar 2011 um 12:09)

  • Du brauchst eigentlich nur noch FileFindFirstFile() und FileFindNextFile().
    Als Grundgerüst zum fertig bauen:

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Global $sQuellordner, $sZielordner, $sDateiTyp

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

    $hGUI = GUICreate("Bilder einlesen...", 615, 440, 246, 152)
    $ctrlOrdnerwahl = GUICtrlCreateButton("Ordnerwahl", 440, 36, 119, 49)
    $ctrlStart = GUICtrlCreateButton("Start", 444, 220, 115, 61)
    $ctrlAnzeige = GUICtrlCreateCombo("Anzeige", 444, 180, 117, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "jpg|png")
    $ctrlAblage = GUICtrlCreateButton("Ablageordner", 440, 96, 119, 49)
    $ctrlQuelle = GUICtrlCreateInput("Quelle", 48, 52, 381, 21)
    $ctrlLabel1 = GUICtrlCreateLabel("Quellordner", 48, 28, 58, 17)
    $ctrlLabel2 = GUICtrlCreateLabel("Zielordner", 48, 88, 51, 17)
    $ctrlZiel = GUICtrlCreateInput("Ziel", 48, 108, 385, 21)
    $ctrlLabel3 = GUICtrlCreateLabel("Welche Formate sollen gelesen werden?", 232, 188, 196, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $ctrlOrdnerwahl
    $sQuellordner = FileSelectFolder("Bitte Ordner wählen", "", Default, @ScriptDir)
    If @error Then Exit
    GUICtrlSetData($ctrlQuelle, $sQuellordner)

    Case $ctrlAblage
    $sZielordner = FileSelectFolder("Bitte neuen Ordner wählen", "", Default, @ScriptDir)
    If @error Then Exit
    GUICtrlSetData($ctrlZiel, $sZielordner)

    Case $ctrlStart
    $sDateiTyp = GUICtrlRead($ctrlAnzeige)

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

    If MsgBox(4, "", "Sollen alle " & $sDateiTyp & " Dateien eingelesen werden?") = 6 Then

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

    $hFFFF = FileFindFirstFile($sQuellordner & '\*.' & $sDateiTyp) ;Erzeuge SuchHandle um Dateisuche zu starten
    If $hFFFF = -1 Then
    MsgBox(0, "Fehler", "Keine " & $sDateiTyp & "-Dateien im Quellordner gefunden")
    ContinueLoop
    EndIf

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

    Do ;Endlosschleife
    $sDatei = FileFindNextFile($hFFFF) ; hole den nächsten passenden Dateinamen
    If @error Then ExitLoop ; gehe raus wenn es keine passenden Dateien mehr gibt

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

    MsgBox(0, "Beispiel", "FileMove( " & $sQuellordner & '\' & $sDatei & ", " & $sZielordner & "\" & $sDatei & " )")
    Until 0

    FileClose($hFFFF) ;Handle wieder schließen
    Else
    MsgBox(4096, "Abbruch", "Daten wurden nicht eingelesen")
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • ich sag nur _FileListToArray ...

    hier mal ein beispiel

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

    #Include <File.au3>
    #Include <Array.au3>

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

    $filepath = "D:\Data\"
    $OST_OSA =_FileListToArray($filepath,"OST_OSA*.sql",1) ; liest alle files mit angfang " "OST_OSA" und ende "sql" in ein array

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

    If @Error= 1 Then
    MsgBox (0,"","Path not found or invalid",1)
    Exit
    EndIf
    If @Error= 4 Then
    MsgBox (0,"","No Files Found.",1)
    Exit
    EndIf
    _ArrayDisplay($OST_OSA,"$FileList")

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

    For $x = 2 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]

    gruß gmmg

  • Hallo AspirinJunkie (...toller Name)

    merci für deine Hilfe.
    Diese Befehle kannte ich noch nicht
    ...mal wieder was gelernt.

    Mach mich gleich an die Arbeit
    melde mich wieder

    Liebe Grüße
    Ilse ;)

  • Hallo gmmg,

    danke für deine Hilfe.
    Ich habe mal das Script (Pfade) etwas geändert,
    aber da passiert leider nichts!

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>

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

    $filepath = "C:\Users\Public\Pictures\Sample Pictures" ; Windows Bilder-Ordner
    $OST_OSA =_FileListToArray($filepath,"Bach*.sql",1) ; liest alle files mit angfang " "Bach" und ende "sql" in ein array
    ;Im Ordner ist z.B.ein Bild drin Bach.jpg
    If @Error= 1 Then
    MsgBox (0,"","Path not found or invalid",1)
    Exit
    EndIf
    If @Error= 4 Then
    MsgBox (0,"","No Files Found.",1)
    Exit
    EndIf
    _ArrayDisplay($OST_OSA,"$FileList")

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

    For $x = 2 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]


    kann man dann auch alle jpg's , gifs filtern und auslesen?
    Liebe Grüße
    Ilse ;)

  • ja, das geht.

    Ändere einfach zeile 5 zu:

    [autoit]


    $OST_OSA1 =_FileListToArray($filepath,"*.jpg",1)
    $OST_OSA2 =_FileListToArray($filepath,"*.gif",1)

    [/autoit]
  • ...hm
    ich kriegs einfach nicht zum laufen!

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>

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

    $filepath = "C:\Users\Public\Pictures\Sample Pictures"
    $OST_OSA1 =_FileListToArray($filepath,"*.jpg",1)
    $OST_OSA2 =_FileListToArray($filepath,"*.gif",1)

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

    If @Error= 1 Then
    MsgBox (0,"","Path not found or invalid",1)
    Exit
    EndIf
    If @Error= 4 Then
    MsgBox (0,"","No Files Found.",1)
    Exit
    EndIf
    _ArrayDisplay($OST_OSA,"$FileList")

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

    For $x = 2 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]
  • Was kommt den als Fehler, und was willst du genau machen?

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>

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

    $filepath = "C:\Users\Public\Pictures\Sample Pictures"
    $OST_OSA1 =_FileListToArray($filepath,"*.jpg",1)
    $OST_OSA2 =_FileListToArray($filepath,"*.gif",1)

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

    If @Error= 1 Then
    MsgBox (0,"","Path not found or invalid",1)
    Exit
    EndIf
    If @Error= 4 Then
    MsgBox (0,"","No Files Found.",1)
    Exit
    EndIf
    _ArrayDisplay($OST_OSA1)
    _ArrayDisplay($OST_OSA2)

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

    For $x = 2 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]
  • Wieso verwendest du auch $OST_OSA wenn du diese Variable nie deklariert hast? Und wieso gibst du der Zählervariable in der For Schleife den Wert 2? Damit wird die erste gefundene Datei einfach übersprungen und wenn nur eine Datei gefunden wurde wird die For Schleife nicht einmal ausgeführt.

  • hab das ganze geändert
    aber es werden immer noch keine Dateien gezeigt!

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>

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

    $filepath = "C:\Users\Public\Pictures\Sample Pictures"
    $OST_OSA =_FileListToArray($filepath,"*.jpg",1)
    $OST_OSA2 =_FileListToArray($filepath,"*.gif",1)

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

    If @Error= 1 Then
    MsgBox (0,"","Path not found or invalid",1)
    Exit
    EndIf
    If @Error= 4 Then
    MsgBox (0,"","No Files Found.",1)
    Exit
    EndIf
    _ArrayDisplay($OST_OSA,"$FileList")

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

    For $x = 1 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]


    Grüße
    Ilse ;)

    P.S. mit den Arrays bin ich noch am lernen!

  • @ name22

    toll deine Tipps,
    mir geht jedesmal ein "Lichtlein auf"

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>

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

    $filepath = "C:\Users\Public\Pictures\Sample Pictures"
    $OST_OSA =_FileListToArray($filepath,"*.jpg",1)
    ;$OST_OSA2 =_FileListToArray($filepath,"*.gif",1)

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

    If @Error= 1 Then
    MsgBox (0,"","Path not found or invalid",1)
    Exit
    EndIf
    If @Error= 4 Then
    MsgBox (0,"","No Files Found.",1)
    Exit
    EndIf
    _ArrayDisplay($OST_OSA,"$FileList")

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

    For $x = 1 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]

    Weißt du wie man in dieser For Schleife
    auch den kpl. Pfad ausgeben kann?

    [autoit]


    For $x = 1 to $OST_OSA[0]
    Msgbox(0,'Record:', $OST_OSA[$x],1)
    Next

    [/autoit]
  • Hier mal Komplettlösung:

    Spoiler anzeigen
    [autoit]

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

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

    $Form1 = GUICreate("Bilder einlesen...", 615, 440, 246, 152)
    $Ordnerwahl = GUICtrlCreateButton("Ordnerwahl", 440, 36, 119, 49)
    $Start = GUICtrlCreateButton("Start", 444, 220, 115, 61)
    $Anzeige = GUICtrlCreateCombo("Anzeige", 444, 180, 117, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "jpg|png")
    $Ablageordner = GUICtrlCreateButton("Ablageordner", 440, 96, 119, 49)
    $Quelle = GUICtrlCreateInput("Quelle", 48, 52, 381, 21)
    $Label1 = GUICtrlCreateLabel("Quellordner", 48, 28, 58, 17)
    $Label2 = GUICtrlCreateLabel("Zielordner", 48, 88, 51, 17)
    $Ziel = GUICtrlCreateInput("Ziel", 48, 108, 385, 21)
    $Label3 = GUICtrlCreateLabel("Welche Formate sollen gelesen werden?", 232, 188, 196, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Ordnerwahl
    $Quellordner = FileSelectFolder("Bitte Ordner wählen", "", Default, @ScriptDir)
    If @error Then Exit
    GUICtrlSetData($Quelle, $Quellordner)
    Case $Ablageordner
    $Zielordner = FileSelectFolder("Bitte neuen Ordner wählen", "", Default, @ScriptDir)
    If @error Then Exit
    GUICtrlSetData($Ziel, $Zielordner)

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

    Case $Start

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

    $Einlesen = MsgBox(4, "", "Sollen alle " & GUICtrlRead($Anzeige) & " Dateien eingelesen werden?")
    If $Einlesen = 6 Then
    $bilder = _FileListToArray($Quellordner, "*." & GUICtrlRead($Anzeige), 1)

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

    If @error < 1 Then
    For $element In $bilder
    MsgBox(0, "", $Quellordner & "\" & $element)
    Next
    EndIf
    Else
    MsgBox(4096, "Abbruch", "Daten wurden nicht eingelesen")

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

    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.