Bestimmte ordner suchen und kopieren

  • Hallo Gemeinde !


    Ich habe teilweise ziemliches wirrwar auf meiner Festplatte und wollte da mit AutoIT Herr drüber wernden ;)


    Bei mir sieht die Ordnerstruktur teilweilse so aus:


    --- ORDNER A
    ------ Ordner 1
    --------- Ordner 2
    ------------ Datei 1
    ------------ Datei 2


    Was ich nun möchte, ist, dass AutoIT rausfindet, dass nur in "Ordner 2" Dateien sind.
    Den Ordner soll er sich dann schnappen, und in einen neuen Ordner, den ich angebe reinkopieren oder dort hin verschieben, je nachem.

    Zum "Programm": Ich geben ihm irgendwelche Ornder an, hier zum Beispiel "Ordner A", "Ordner B", und "Ordner ", er sucht die dann nach Dateien ab, un kopiert den Ordner mit den Dateien in ein neues Verzeichnis.
    Die alten Verzeichnisse kann ich dann nochmal grob duchsehen und dann halt löschen.


    Hoffe, ich konnte deutlich machen, was ich suche ;)

    Ich such kein fertiges Skript dazu, ich möchte nur wissen, wo und wie ich da ansetzen soll. Keine Ahnung, wie ich sowas realisieren kann.


    Danke

    Gruß
    Sorath

  • Wenn ich Dich richtig verstanden habe, sollte Dir aus der AutoIt Doku (siehe links) folgende Beispiele helfen:

    DirMove (Ordner verschieben):

    Spoiler anzeigen
    [autoit]


    DirMove("C:\My Documents", "C:\Backups\MyDocs")

    [/autoit]

    DirCopy (Ordner kopieren):

    Spoiler anzeigen
    [autoit]


    DirCopy("C:\My Documents", "C:\Backups\MyDocs", 1)

    [/autoit]

    FileCopy: (Datei/en kopieren):

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

    FileCopy("C:\*.au3", "D:\mydir\*.*")

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

    ; method to copy a folder (with its contents)
    DirCreate("C:\new")
    FileCopy("C:\old\*.*", "C:\new\")

    [/autoit]

    Erklärungen findest Du unter: http://www.autoit.de/dokumentation/functions.htm Das sind die sog. Funktionsreferenzen und hier kannst Du auch nachlesen, wie Du dann die Ordner löschen kannst usw.

    Gruß, Crazy-A.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ja, okay, soweit klar, danke für die schnelle antwort :)

    Wie man die Ordner und Dateien kopiert wusst ich, wo's aber noch hapert, ist rauszufinden, in welchen ordner die dateien liegen, und das in eine Variable zu geben.

    Wie gesagt, ich hab ein Ordner A, der hat noch 3 unter Ordner, welche auch nochmal welche haben können, und irgendwann kommt einer, der Dateien beinhaltet.

    Den möchte ich dann rauskopieren, aber wie sag ich meine Skript, dass er den finden soll ?

  • Evtl. hilft Dir das weiter?

    Dateien finden:
    FileFindFirstFile Gibt einen den angegebenen Suchkriterien entsprechenden Dateinamen zurück.
    FileFindNextFile Gibt einen Dateinamen entsprechend eines früheren Aufrufes von FileFindFirstFile zurück.

    Spoiler anzeigen
    [autoit]


    $search = FileFindFirstFile("*.*")

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

    ; Prüft ob Suche erfolgreich war
    If $search = -1 Then
    MsgBox(0, "Error", " Suche erfolglos. Habe nichts gefunden")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop

    MsgBox(4096, "Datei:", $file)
    WEnd

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

    ; schließe die Suchabfrage
    FileClose($search)

    [/autoit]

    Crazy-A

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ich hab hier mal einen kleinen Ansatz..

    Ist vielleicht von der Struktur nicht so gut, aber vielleicht hilft es dir ja =)

    Spoiler anzeigen
    [autoit]

    Dim $ret = '', $i = 0, $file = False
    Dim $find[1]

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

    $search = FileFindFirstFile( '*.*' )
    Do
    $find[$i] = FileFindNextFile( $search )
    $i += 1
    ReDim $find[$i+1]
    Until @error
    For $i = 0 To UBound( $find )-1
    If StringInStr( $find[$i], '.' ) Then ; Achtung ! Hier musst du dir noch was überlegen, auch in Ordnernamen können 'Punkte' vorhanden sein :p
    $file = True
    ExitLoop
    EndIf
    Next

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

    If Not $file Then
    MsgBox( 0, 'Info', 'In diesem Verzeichnis wurde keine Datei gefunden' )
    Else
    MsgBox( 0, 'Info', 'Es wurden Dateien gefunden' )
    EndIf
    If $find[0] = '' Then
    MsgBox( 0, 'Info', 'Es existieren auch keine weiteren Unterordner' )
    Else
    ; Hier die anderen Unterordner durchgehen
    EndIf

    [/autoit]

    mfg limette =)

    Edit: Kleine Ungenauigkeit mit dem StringInStr, ... aber wenn das nur für dich ist und du keine Punkte in Ordnernamen verwendet hast
    dürfte das eigentlich nicht so das Problem sein ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.