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)
$Anzahl_Ordner_im_Unterverzeichnis_erste_Ebene = _FileListToArray($Start_Verzeichnis & $Verzeichnis_Liste[$i], "*", 2) ; 2 Gibt nur Ordner zurück (Anzahl und Namen)
If @Error <> 0 Then ;
ConsoleWrite ("Ordner - Fehlernummer: " & @Error & @CRLF )
$Anzahl_Ordner_im_Unterverzeichnis_erste_Ebene = 0 ; (geht nicht)
@Error = -99 ; auf diesen Wert gesetzt, damit ich sehe, ob die Variable neu belegt wird (geht nicht)
EndIf
$Anzahl_Dateien_im_Unterverzeichnis_erste_Ebene = _FileListToArray($Start_Verzeichnis & $Verzeichnis_Liste[$i], "*", 1) ; 1 Gibt nur Dateien zurück (Anzahl und Namen)
If @Error <> 0 Then ;
ConsoleWrite ("Datei - Fehlernummer: " & @Error & @CRLF )
$Anzahl_Dateien_im_Unterverzeichnis_erste_Ebene = 0 ; (geht nicht)
@Error = -99 ; auf diesen Wert gesetzt, damit ich sehe, ob die Variable neu belegt wird (geht nicht)
EndIf
ConsoleWrite ("Ordner: " & $Anzahl_Ordner_im_Unterverzeichnis_erste_Ebene[0] & " - Dateien: " & $Anzahl_Dateien_im_Unterverzeichnis_erste_Ebene[0] & " - " & $Start_Verzeichnis & $Verzeichnis_Liste[$i] & @CRLF )
Alles anzeigen
Laut Hilfe soll bei _FileListToArray, wenn es zu einem Fehler kommt, der Rückgabewert 0 sein.
ConsoleWrite kann aber nichts ausgeben. Fehler:
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