in einer Batch Datei die gelöschten Dateien zählen?

2 Antworten

Die Problematik bei Anfängern ist, sie schreiben immer nur ab, dabei ist die Lösung trivial:

Schaut man sich den Output von del /q /s "Pfad\datei.ext" an fällt die Rückmeldung von del auf:

Datei wurde gelöscht - C:\Users\Erzesel Secure\Desktop\Testfolder\datei.ext
Datei wurde gelöscht - C:\Users\Erzesel Secure\Desktop\Testfolder\Unterordner\datei.ext

Fehler haben den Präfix "Datei wurde gelöscht - " nicht!

...also brauchen wir nur die Zeilen mit dem Präfix aussieben und Zählen.

Das erledigen wir indem wir den mit find "Datei wurde " gefilterten Output in eine Schleife schicken und bei jedem Durchlauf 1 zu einer Variable addieren:

for /f %%a in ('del /q /s "Pfad\datei.ext" 2^>nul^|find "Datei wurde "') do (set /a "newCounter+=1")

Ich hoffe ich habe den Ablauf einigermaßen verständlich rübergebracht.

Ich nutze keinen Firefox. Somit kann ich auch keine Fix und Fertige Batch für Deinen Bedarf schreiben. Also nur eine Demo, wie es Abzulaufen hat.

count del.cmd

@echo off
chcp 65001 >nul
set "MyFolder=mein Testordner"


:: dies dient nur der Demo
  rem ezeuge (wenn nötig) den Testordner
md "%MyFolder%\Mein Unterordner" 2>nul
  rem ezeuge zwei Testdateien mit Zufallsnamen
echo iwas>"%MyFolder%\tst%random%%random%.txt"
echo iwas>"%MyFolder%\Mein Unterordner\tst%random%%random%.txt"
:: Ende der Demovorbereitung
  
  rem stelle  sicher das  unser Zähler  auf 0 steht
set "newCounter=0"

  rem zähle einfach die Zeilen welche von Del als gelöscht raportiert  wurden (Datei wurde gelöscht - lw:\Pfad\datei.ext)
  rem lösche Datei und fildere alle Zeilen, welche "Datei wurde " enthalten.
  rem das Ergebnis (in %%a) interessiert uns nicht wir Zählen nur die Zeilen...(set /a "newCounter+=1")
for /f %%a in ('del /q /s "%MyFolder%\*.*" 2^>nul^|find "Datei wurde "') do (set /a "newCounter+=1")

  rem kleines Bonbon... hole den Stand des Gesamt-Dateizählers vom letzten Start der Batch
call :getLastAccu
  rem Addiere die nei gefundene Anzahl zur Gespeicherten
set /a "accumulatedCounter+=newCounter"

  rem hänge den neuen Wert des Gesamtzählers als Set-Befehl an die Batch an 
  rem die  Batch wird  bei jeder Ausführung  um eien Zeile ergänzt. Beim Aufruf der subroutine :getLastAccu werden alle bisherigen Set-Befehel ausgeführt aber  nur der letzte Aufruf zählt.
  rem das mag zwar erstmal unpraktisch erscheinen, aber dieser kleine Overhead ist auf modernen Rechnern zu vernachlässigen, spart er doch das auswerten einer externen Datei.
@(echo set accumulatedCounter=%accumulatedCounter%)>>"%~f0"

  rem Raport anzeigen
echo am: %date% um %time% Uhr %newCounter% Dateien gelöscht.
echo insgesamt %accumulatedCounter%.
  rem Raport in logdatei schreiben
@(
    echo am: %date% um %time% Uhr %newCounter% Dateien gelöscht.
    echo insgesamt %accumulatedCounter%.
)>> "%~n0.log"
  rem warte 5 Sekunden
timeout 5 >nul
  rem Batch beenden
exit /b

:getLastAccu
set accumulatedCounter=0
::nach dieser Zeile darf nichts mehr (außer einer Leerzeile) kommen! (hier wird  der Stand des Zählers für den nächsten start gespeichert)

...als kleines Extra "merkt" sich die Batch wieviele insgesamt von ihr gelöscht wurden... (im Code erklärt)

Glossar:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

MikeAmiga 
Fragesteller
 04.02.2021, 00:59

Vielen Herzlichen Dank, das hat mir sehr geholfen und es funktioniert einfach super. DANKE LG Mike

0

https://stackoverflow.com/questions/138497/iterate-all-files-in-a-directory-using-a-for-loop

Schau dir das mal an: Damit kannst du die einzelnen Dateien per for-Schleife auslesen. Statt diese einfach auszugeben, kannst du ja dann löschen und loggen mit einbauen ...


Erzesel  04.02.2021, 11:58

...eine Möglichkeit, aber doppelt gemoppelt . Das Problem dabei, es werden alle Dateien behandelt, nicht nur die, welche tatsächlich gelöscht wurden (es könnte ja auch welche schreibgeschützt oder wegen anderen Zugriffs gesperrt sein und somit nicht gelöscht werden).

0