Dateiliste - Dateien verschieben - Tiefe: nur erste Ebene

  • Hallo Freunde der automatisierten Schritte,

    ich möchte ein wenig aufräumen - automatisch :) Im Laufe der Zeit haben sich viele Texte, Bilder etc angesammelt, die ich leider nicht immer gleich einsortiert habe. Daher möchte ich das nun automatisch tun.

    Die Grundidee sieht so aus:

    (ich schildere Euch die Idee komplett, um gleichzeitig zu fragen, ob der Weg so o.k. wäre und wie ich ansonsten dabei am besten vorgehen kann)

    (1)

    Ausgehend vom Startverzeichnis schaue in jedes Unterverzeichnis der ersten Ebene und prüfe, ob es darin genau
    1 Datei gibt und 0 Unterverzeichnisse (daran scheitere ich bereits - siehe unten).

    (2)

    Wenn es genau 1 Datei gibt, prüfe die Datei nach bestimmten Kriterien. Hier gibt es über 30 Kriterien, z.B. Erweiterung, Dateiname beginnt mit, Dateiname enthält ...

    Beispiel:

    Erweiterung epub -> veschieben nach c:\! Zeitung
    Erweiterung pdf -> verschieben nach c:\! Anleitung
    Erweiterung jpg -> verschieben nach c:\! Fotos
    enthält den String "Wetter" -> verschieben nach c:\! Archiv\Wetterbericht
    beginnt mit String "Katze" -> verschieben nach c:\! Archiv\Haustier\Katze
    ...

    Welches ist Eurer Meinung nach der einfachste Weg, um mit Autoit, so eine Kriterienliste zu erweitern und abzuarbeiten?

    Muss man für jede Abfrage eine IF ... THEN ... Konstruktion erstellen?
    Welche Alternativen gibt es?

    Wie wäre es damit, dass man die Parameter in eine ini.Datei auslagert (wäre das überhaupt der beste Weg?) und in einer Schleife wird dann ausgelesen, ob die Prüfung erfolgt auf

    1 = Erweiterung
    2 = enthält String
    3 = beginnt mit String

    Ich könnte mir einen Eintrag in einer ini-Datei so vorstellen:

    2, Wetter, c:\! Archiv\Wetterbericht

    würde bedeuten: enthält String Wetter, verschiebe nach "c:\! Archiv\Wetterbericht"

    Habt Ihr dafür einen Programm-Schnipsel?

    Oder gibt es noch eine bessere Möglichkeit mit Autoit, wenn man auf viele Kriterien prüfen (und die Liste ggf. erweitern) möchte, bis ein Kriterium zutrifft, so dass man dann die Schleife verlassen kann?

    (3) o.k.

    Verschiebe die Datei - mit FileMove - das sollte problemlos möglich sein.

    (4)

    Wenn das Verzeichnis leer ist, verschiebe es nach "! leer"
    Gibt es hier einen besseren Weg, als das Verzeichnis nach dem Verschieben der Datei mit _FileListToArray zu prüfen, ob es leer ist?


    Ich scheitere bereits bei Punkt (1)


    Laut Hilfe soll bei _FileListToArray, wenn es zu einem Fehler kommt, der Rückgabewert 0 sein.

    ConsoleWrite kann aber nichts ausgeben. Fehler:


    AutoIt
    ConsoleWrite ("Ordner: " & $Anzahl_Ordner_im_Unterverzeichnis_erste_Ebene[0] & " - Dateien: " & $Anzahl_Dateien_im_Unterverzeichnis_erste_Ebene[0] & " - " & $Start_Verzeichnis & $Verzeichnis_Liste[$i] & @CRLF )
    ConsoleWrite ("Ordner: " & $Anzahl_Ordner_im_Unterverzeichnis_erste_Ebene^ ERROR

    Als Fehlerwert bei einem leeren Verzeichnis (also keine Dateien enthalten) erscheint bei _FileListToArray = 4. (laut Hilfe: "4 = Keine Datei(en) gefunden". Scheint auch für Ordner so zu sein.


    Nun wollte ich sehen, ob die @Error Variable neu belegt wird, siehe oben, aber mit "@Error = -99" kann ich sie scheinbar nicht selbst belegen. Kann ich die @Error Variable überhaupt selbst belegen? Wie sehe ich ansonsten bei 2 aufeinanderfolgenden Verwendungen, dass sich der Inhalt der Fehlervariablen auf den letzten Befehl bezieht? Gibt es einen Befehl, um die Fehlervariable sozusagen zurückzusetzen?


    Viele Grüße
    AutoMit

    3 Mal editiert, zuletzt von AutoMit (14. Januar 2016 um 14:21)

  • Schreibe die Endungen und Pfade in eine *.ini datei:

    [endungen]
    e1 = pdf
    e2 = mpg
    e3 = doc
    e4 = Ende

    wenn du nun eine passende schleife anlegst kannst du diese einfach bis zu einem Zähler von 10.000 laufen lassen die Abbruchbedingung = e(x) = ende,
    So machst Du das auch bei den Pfaden.

    Dann bekommst du entsprechende 1D Arrays, die du weiterbearbeiten kannst.

    Man könnte auch mehrere Infos in ein Array bzw ini schreiben:

    e1 = pdf@D:\Daten\test\pdf

    hier hast Du bis zum Trennzeichen@ die Endung - danach den Pfad. Mit string manipulation auseinderprimeln. Geht für mich manchmal einfacher als der Umgang mit 2/3/4/5 und soweiter Arrays.


    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hallo Peter,

    danke für den Hinweis.

    Da keine weiteren Meinungen eingetroffen sind, werde ich mich an einer ini-Datei Konstruktion versuchen, um die Dateien automatisch sortieren zu können.

    Ein schönes Wochenende