in einer Batch Datei die gelöschten Dateien zählen?
Hallo!
Ich habe eine Sicherungsroutine die sich nacht um 03:03 selbstständig startet... und eine die sich jede Stunde 10min nach voller Stunde startet. Die Stündliche löscht einfach nur die cookies im firefox verzeichniss nicht mehr. Wie stelle ich es nun an wenn ich aus Spaß an der Freud wissen möchte was den da so zusammenkommt. Eine sich erhöhende Variable wo ich nach einen jahr oder so mal nachsehe und lesen kann: gelöschte Kekse: 124356
Derzeitig lasse ich "nur" datum und uhrzeit zur überprüfung in eine txt datei schreiben, siehe....
ECHO ------- am: %date% um %time% Uhr ------- >> "C:\%~n0.log"
COLOR 6f
ECHO OFF
echo j | del/S/Q "Z:\FOXcache\cache2\entries\"
EXIT
Wenn mir jemand unter die Arme greifen möchte ;-) Danke im voraus.
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:
Vielen Herzlichen Dank, das hat mir sehr geholfen und es funktioniert einfach super. DANKE LG Mike
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 ...
...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).