Hilfe beim Ordner durchsuchen und löschen der Dateien

  • Servus zusammen,

    eines vor weg, ich fange gerade an mit AutoIt zu programmieren und würde Hilfe bei folgendem Tool benötigen:

    Ich möchte ein Verzeichnis (in diesem Fall ein Netzlaufwerk) auf alle Dateien mit der Endung .txt durchsuchen (inkl. allen Unterordnern). Und diese anschließen löschen lassen.

    Wäre nett wenn mir hierbei jemand helfen könnte.

    Danke,
    lg

  • Schau dir diese Befehle an, damit kannst es machen:

    FileFindFirstFile
    FileFindNextFile
    FileDelete

    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.

  • ungetestet hätte ich es so gemacht..


  • Vielleicht überhaupt der Hinweis auf den Befehl _FileListToArrayRec.
    In der AutoIt Help findet sich zu diesem Befehl ein leicht verständliches, kompaktes und direkt lauffähiges Example, wo die jeweiligen Resultate ratzfatz in einer Tabelle dargestellt werden, mittels _ArrayDisplay().

    Keine Angst, da wird nichts gelöscht, sondern nur die Liste angezeigt, entsprechend der jeweiligen Parameter.

    Etwas damit herumspielen, bis alle Einstellungen stimmen, so dass die Ergebnisliste korrekt das zeigt, was man löschen möchte. Dann erst den Befehl zum Löschen einbauen, wie GerhardSchr es demonstriert.
    So kann nichts in die Hose gehen, durch eventuell falsch gesetzte Parameter.


    Edit: Oh, autoBert hat weiter oben ja bereits darauf hingewiesen ...

    Ich code, also bin ich!

  • wenn man es noch etwas "sicherer" machen will, könnte man statt StringinStr StringRegExp benutzen:


  • Danke GerhardSchr funktioniert wunderbar dein Code.

    Eine Frage hätte ich nur noch.. Wenn ich vor dem Löschen eine Abfrage mit JA/NEIN einbaue, kommt diese Frage 5-6 Mal bis er es wirklich löscht.

    Hier der Code:

  • deine abfrage muss innerhalb von

    AutoIt
    If StringRegExp ($file, "\.txt$", 0) Then
    			FileDelete ($file)
    		EndIf


    vorgenommen werden, sonst fragt er auch bei NICHT txt dateien, ob er löschen soll (obwohl er da nicht löscht)


    z.B. so:


    //edit: beim löschen bietet es sich an auch fehler abzufangen, da z.B. eine geöffnete Datei sich bei windows nicht einach löschen läst:

    oh ich sehe gerade, dass du nur einmal fragen willst, dachte es soll bei jeder datei gefragt werden...
    hier die version wo er nur am anfang einmal fragt:


    6 Mal editiert, zuletzt von GerhardSchr (13. Juni 2016 um 13:11)

  • hmm das konnte man mit einen counter lösen:


    wobei ich das nicht elegant finde, daher meine frage:
    wie kann ich $counter in der funktion declarieren, ohne mir den wert jedesmal wieder zu resetten?
    ich dachte da an IsDeclared....allerdings hat dies nicht so geklappt wie ich wollte...

  • GerhardSchr: hier nehme ich die Anzahl immer als Rückgabe mit:


    €Edit:

    GerhardSchr: Du solltest bei deinem StringRegExp() nicht das "(?i)" vergessen sonst findet er nicht alles :)

    Man kann es übrigens auch so lösen:

    FileDelete auskommentiert, da nicht hinreichend getestet :saint:


    mfg Zeitriss

    Einmal editiert, zuletzt von Zeitriss (13. Juni 2016 um 21:04)

  • moin,
    jo mit dem retrun wert ist ne gute idee...


    aber warum soll er ohne (?i) nicht alles finden?

    FileFindNextFile hatte ich auch schonmal benutzt.....bei mir ist dann der code unübersichtlich gewurden :)
    auch war es damals für mich eine kleine übung, funktionen mehrfach selbst aufzurufen ;)

  • ah ok dann habe ich dich falsch verstanden, ich dachte dass in manchen fällen auch .txt nicht gefunden wird...
    klar (?i) macht dann sinn :)


    also dann so:

    AutoIt
    StringRegExp ($file, "(?i)\.txt$", 0)

    Einmal editiert, zuletzt von GerhardSchr (14. Juni 2016 um 11:05)