Hey,
ich möchte in einem Laufwerk, sagen wir C:\, alle Dateien mit der Endung .pdf löschen.
Wie kann ich das mit batch oder AutoIT anstellen?
Dateien mit bestimmten Endungen löschen
-
- [ gelöst ]
-
Scritch -
6. Oktober 2010 um 12:03 -
Geschlossen -
Erledigt
-
-
Was soll das werden wenns fertig ist?
-
Was meinst du?
Wenns fertig ist solls halt Dateien mit einer bestimmten Endung
auf einem bestimmten Laufwerk löschen. Das oben war nur ein
Beispiel. -
Naja man kann viel Unsinn damit anstellen.
Du brauchst rekursive Dateiauflistung. z.B. die hier: Rekursive Datei/Ordner Auflistung per Objekt
eine For Schleife und Filedelete -
Ja, da bin ich gestern drauf gestoßen.
Sagt wohl jeder, aber keine Angst, ich habe
damit keinen unsinn vorWozu aber die Rekursive Datei/Ordner Auflistung per Objekt?
Eig. hatte ich gehofft, dass das mit 3, oder 4 Zeilen abgespeist ist
-
Wozu aber die Rekursive Datei/Ordner Auflistung per Objekt?
Wie kommst du denn sonst an die Dateinamen? -
Die Namen sind ja prinzipiell egal, da nur die Endung berücksichtigt werden soll.
Naja, vll. ist das in AutoIT ja nicht anders möglich. Ich habe mich da nur an Batch
orientiert, und da brauche ich wenn ich einen bestimmten Pfad habe auch nur angeben
und es werden hier dan alle PDF-Dokumente gelöscht.
Aber ich brauche es halt nicht nur für einen Pfad, sondern für ein ganzes Laufwerk. -
strenggenommen ist ein laufwerk doch auch nur ein Pfad
-
Nur einen bestimmten ordner mit allen unterordner durchsuchen geht auch.
-
Hm?
Na klar - eine Möglichkeit dafür hat Schnitzel doch schon gepostet! -
hier das beispiel aus der hilfe
[autoit][/autoit][autoit][/autoit][autoit]FileDelete("D:\*.tmp")
[/autoit][autoit][/autoit][autoit][/autoit]wie gesagt, man kann aber auch alle files bsp. (*.pdf) in den unterordnern von c:\ auflisten und dann löschen lassen!
gruß gmmg
-
Hier ein Beispiel um es rekursiv zu löschen.
Versteh nicht ganz wo das Problem liegt das zu verwenden. Gut es dauert etwas aber daran wirste nicht vorbeikommen.
Zeile 1 kannste natürlich löschen. Ich will nur nicht das sich das jemand rauskopiert und ausführt ohne vorher den Code anzusehnSpoiler anzeigen
[autoit]If Not MsgBox(1, "Achtung", "Alle PDF's auf C: werden gelöscht") = 1 Then Exit
[/autoit]
#include "_GetFilesFolder_Rekursiv.au3"
$aPdf = _GetFilesFolder_Rekursiv("C:\", "pdf", 0)
For $i = 1 To $aPdf[0]
FileDelete($aPdf[$i])
Next -
Ok, wunderbar. Funktioniert. Danke
Dann jetzt noch eine kleine Erweiterung: Bestimmte Dateien
von dem zu löschenden Datentyp sollen nicht gelöscht werden.
Z. B. Die File C:\Eigene Dateien\wichtig.pdf
Nicht nur das: Es sollen auch vereinzelt ganze Verzeichnisse
ausgelassen werden.So habe ich es mir vorgestellt.
Spoiler anzeigen
[autoit]#include "_GetFilesFolder_Rekursiv.au3"
[/autoit]
Local $aauslassen[1]
$aauslassen[0] = "wichtig.345"
$a345 = _GetFilesFolder_Rekursiv("C:\", "345", 0)
For $a = 1 to UBound($aauslassen) - 1
If ;Datei = [$a]Then gehe zu nächster datei
If ;Ordner = "c:\sehr wichtige Dokumente" dann gehe zu nächstem Verzeichnis
For $i = 1 To $a345[0]
FileDelete($a345[$i])
Next
EndIf
EndIf
Next
Aber mir fehlen irgendwie
die Befehle. Die Liste der UDF's ist alles andere als
komplett...Was anderes am Rande: Kann man mit AutoIT auch parallel
Dinge laufen lassen. Also nicht 2 Scripte zugleich,
sondern dass in einem Script z. B. 2 Schleifen gleichzeitig
durchlaufen werden?Edit:
Obs so funktionieret?Spoiler anzeigen
[autoit]#include "_GetFilesFolder_Rekursiv.au3"
[/autoit]
;Local $aauslassen[1]
;$aauslassen[0] = "wichtig.pdf"
$a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)
For $a = 1 to UBound($aauslassen) - 1
For $i = 1 To $a345[0]
If Not [$i] = "d:\nicht löschen\wichtig.pdf" Then
If not [$i] = "d:\nicht löschen.345" Then
FileDelete($a345[$i])
EndIf
EndIf
Next
Next -
Hi!
Der Gedanke ist soweit schon mal gut, entweder die Struktur oder die Datei als Platzhalter übergeben wonach geprüft werden soll, du könntest ein Array vorweg devinieren und
[autoit]StringRegExp
[/autoit]
Übergeben!LG Kleiner
-
Hmmm... was? Wieso
[autoit]StringRegExe
[/autoit]
?
Ein Array hatte ich ja zuerst, brauchte ich dann aber doch nicht.Hätte eig. gedacht, dass es so jetzt funktioniert:
Spoiler anzeigen
[autoit]#include "_GetFilesFolder_Rekursiv.au3"
[/autoit]
$a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)
For $i = 1 To $a345[0]
If Not [$i] = "d:\nicht löschen.345" Then
If Not [$i] = "d:\nicht löschen\" Then
FileDelete($a345[$i])
EndIf
EndIf
Next
Pustekuchen.
"Line 4 - Error in Expression"
Was ist an "If Not [$i] = "d:\nicht löschen.345" Then" verkehrt? :pinch: -
Hi!
Du musssssst dich schon mal mit Array ausseinander setzen dann kommt auch nicht so ein leichtsinniger Fehler!
[autoit]
aus:If Not [$i] = "d:\nicht löschen.345" Then
[/autoit]
If Not [$i] = "d:\nicht löschen\" Then
[autoit]
bitte so:If Not $a345[$i] = "d:\nicht löschen.345" Then
[/autoit]
If Not $a345[$i] = "d:\nicht löschen\" Then
[autoit]
und die zeile ist ÜberflüssigIf Not $a345[$i] = "d:\nicht löschen\" Then
[/autoit]Lg Kleiner
-
Verdammt. Ja, stimmt. Das mit dem Array war unüberlegt.
War da irgendwie noch bei Batch gerade, als ichs geschrieben habe
[autoit]Not $a345[$i] = "d:\nicht löschen\" Then
[/autoit]
Das soll eine typische NAND-Verknüpfung sein, wenn man das so nennen kann.
Nur wenn beides Nicht wahr ist, dann soll die Datei die in $a345[$i] gerade steht
gelöscht werden...Oder mache ich da einen Denkfehler?
-
[autoit]
if not $datei="xyz" and if not $datei="abc" then
[/autoit]
Das wäre die AND-Verknüpfung. -
Das wäre die AND-Verknüpfung.
Ist ja quasi das, was ich gesagt habe. Funktionrt nur genauso wenig
Wenn ich die Bedingung orweg schreibe, werden gar keine Dateien gelöscht -
Die Funktionen funktionieren wie gewünscht.
Da stimmt was am Skript nichtWieweit biste jetzt gekommen?
-