Batch: For-in-do-del-> Datei nicht gefunden

Hallo Leute!

Hoffe, ich bin hier einigermaßen richtig, da ich kein extriges Unterforum für Batch gefunden habe.

Ich lass mir durch eine Batch-Datei eine Liste mit Dateien erstellen, und diese Dateien auf der Liste möchte ich dann, nachdem ich diese Liste gegebenenfalls bearbeitet habe, löschen lassen. Folgende 2 Batch-Dateien habe ich dazu geschrieben:

"—ListFilesToDelete.bat—
@echo off

XCopy „F:\EIGENE DATEN\Verschiedenes“ /L /E /H /Y>„F:\EIGENE DATEN\AllFiles.txt“

Find „.ini“ „F:\EIGENE DATEN\AllFiles.txt“>„F:\EIGENE DATEN\FilesToDelete.txt“

Find „.jpg“ „F:\EIGENE DATEN\AllFiles.txt“>>„F:\EIGENE DATEN\FilesToDelete.txt“

Find „.bmp“ „F:\EIGENE DATEN\AllFiles.txt“>>„F:\EIGENE DATEN\FilesToDelete.txt“

Find „.txt“ „F:\EIGENE DATEN\AllFiles.txt“>>„F:\EIGENE DATEN\FilesToDelete.txt“

Exit"

"—DeleteFilesOnList.bat—

FOR /f „tokens=*“ %%f IN (FilesToDelete.txt) DO DEL /F /S /Q „%%f“

Exit"

So, nun das Problem:
Der letzte Befehl (FOR-IN-DO-DEL) bringt die Ausgabe „F:\EIGENE DATEN\Verschiedenes\Bilder\Autos\Audi\S5.jpg konnte nicht gefunden werden“

Wenn ich aber bei dem FOR-Befehl ab „DO“ „Echo %%f“ hinschreibe, gibt er mit richtig den Dateinamen zurück, nur mit dem Löschen scheint das ganze Probleme zu machen…

Wisst ihr vielleicht wieso das nicht funktioniert, und was man dagegen tun kann?

Unter „F:\EIGENE DATEN\Verschiedenes“ gibt es noch viele Unterordner und Unter-Unterordner, als von Hand machen ist keine gute Idee.

MfG Alex

"—DeleteFilesOnList.bat—

FOR /f „tokens=*“ %%f IN (FilesToDelete.txt) DO DEL /F /S /Q
„%%f“

Exit"

Ok, habe das Problem gelöst x.X

Er hat die Datei nicht gefunden, weil es versteckte Dateien sind.
Wenn man den Befehl folgendermaßen umschreibt, funktioniert das Ganze:

FOR /f „tokens=*“ %%f IN (FilesToDelete.txt) DO DEL /F /S /Q /A:H
„%%f“

Das „/A:H“ gibt an, dass das Attribut der zu löschenden Datei versteckt ist.

MfG Alex

Hallo Alex,

das mit den del-Optionen hast Du ja selbst heraus gefunden.

Ich möchte Dir nur einen Vorschlag zur Optimierung des ersten Batches unterbreiten:xcopy „F:\EIGENE DATEN\Verschiedenes“ /L /E /H | findstr /i /e /c:".ini" /c:".jpg" /c:".bmp" /c:".txt" > „F:\EIGENE DATEN\FilesToDelete.txt“
exit /b 0Um die Endungen nicht im Batch anpassen zu müssen, kannst Du die Endungen auch in einer Datei speichern (je Endung eine Zeile, beginnend mit dem Punkt und diese Datei dann mittels der Option „/G:“ an „findstr“ übergeben und die Optionen „/c:…“ entfernen, also z.B.:xcopy „F:\EIGENE DATEN\Verschiedenes“ /L /E /H | findstr /i /e /g:„F:\EIGENE DATEN\ext.ext“ > „F:\EIGENE DATEN\FilesToDelete.txt“
exit /b 0------ ext.ext ------
.ini
.jpg
.bmp
.txt
------ ext.ext ------

Gruß
Volkmar

Danke für den Tipp!

PREHTML>xcopy „F:\EIGENE
DATEN\Verschiedenes“ /L /E /H /Y | findstr /i /e /c:".ini"
/c:".jpg" /c:".bmp" /c:".txt" > „F:\EIGENE
DATEN\FilesToDelete.txt“
exit /b 0

Funktioniert super, und ich habe in der Ausgabedatei „FilesToDelete“ nicht mehr diese Angabe von „find“, woher die Daten kommen - da stand immer „-------F:\EIGENE DATEN\Sonstiges“, jetzt muss ich es nicht mehr von Hand entfernen :smiley:

xcopy „F:\EIGENE DATEN\Verschiedenes“ /L /E /H /Y |
findstr /i /e /g:„F:\EIGENE DATEN\ext.ext“ > „F:\EIGENE
DATEN\FilesToDelete.txt“
exit /b 0

------ ext.ext ------
.ini
.jpg
.bmp
.txt
------ ext.ext ------

Funktioniert auch, brauche ich vielleicht, wenn ich das Programm ausbaue und der Benutzer selsbt eingeben kann, nach welchen Dateiendungen gesucht werden soll :wink:

Danke nochmal

MfG Alex

Hallo.

Warum löscht du die Dateien nicht mittels

del /s "f:\eigene dateien\verschiedenes\*.ini" "f:\eigene dataien\verschiedenes\*.jpg" "f:\eigene dataien\verschiedenes\*.bmp" "f:\eigene dataien\verschiedenes\*.txt"

?

Sebastian.

Hallo.

Warum löscht du die Dateien nicht mittels

del /s „f:\eigene dateien\verschiedenes*.ini“ „f:\eigene
dataien\verschiedenes*.jpg“ „f:\eigene
dataien\verschiedenes*.bmp“ „f:\eigene
dataien\verschiedenes*.txt“
?

Sebastian.

Hallo Sebastian!

Das wäre wohl die einfachste Idee, jedoch musste ich beim Konzept der Batch folgendes beachten:

Von den Dateien, die gefunden werden, können ca. 90% gelöscht werden (Desktop.ini, *.jpg, die Albumcover sind und der WMP11 anlegt etc.), die restlichen 10% sollten jedoch nicht gelöscht werden (Private Textdukomente, Bilder, etc.). Damit ich nun kontrollieren kann, was gelöscht wird, lasse ich die Liste machen, gehe sie dann kurz durch, da ich die wichtigen Dateien am Namen erkenne, und lösche meine privaten Dateien von der Lösch-Liste.

Wenn ich es so machen würde wie du vorgeschlagen hast, müsste ich entweder bei jeder Datei J/N/Abbrechen eingeben oder alle ausnahmslos löschen. Wenn das nicht diese besondere Problematik wäre, wäre dein Vorschlag natürlich die einfachste und eleganteste Variante. Deswegen danke trotzdem :wink:

MfG Alex