Batch Wenn Ordner mehr als X Dateien dann...

XperienCe

Cadet 4th Year
Registriert
Juni 2011
Beiträge
71
Hallo liebe CB Community,

Ich bin nun am herumexperementieren mit einer Batch Datei die mir folgenden Zweck erfüllt:

Sie soll einen oder vielleicht in Zukunft auch drei bestimmte Ordner "überwachen" (1 mal am Tag mit einem Schedule Task ausführen)
In dem oder den Ordner/n entstehen ständig neue Dateien und wenn die Anzahl der Dateien über 10000 beträgt dann sollen die ÄLTESTEN gelöscht werden bis zu 10000 wieder.
Also die Summe von 10000 Dateien soll nicht überschritten werden.
1 mal am Tag will ich das mit einem Task checken. Da die Datenmengen so rießig sind und immer wieder welche reinkommen und dan schlußendlich der Ordner nicht mehr aufgeht will ich das so lösen.
Ich würde euch Programmierspezialisten bitten mir dabei behilflich zu sein da ich selbst kein Spezialist bin in solchen Anwendungen.

Danke schonmal für eure Mithilfe

mfg Florian
 
Ohne auf deinen Wunsch einzugehen, könnte es ja vielleicht mit einem Dateimanager à la Total Commander gemacht werden. Also dass der Ordner geöffnet und eingesehen werden kann, damit du dann löschen kannst.
 
Bin mir nicht sicher, ob das mit einer cmd Batch funktioniert, Powershell sollte das auf jeden Fall können.
Ich bastel mal ein wenig... ;)
 
dir /B /O:-D >> D:\dateien.txt

So hättest du dann schon mal alle neuen Dateien oben und die älteren Dateien unten.
Dann müsstest du die Anzahl der Dateien zählen lassen, dann deine 10000 davon abziehen.
Dann hättest du die Differenzanzahl der Dateien die du löschen kannst.

Hättest du jetzt Linux, dann wäre das kein Thema. :)
Dort gibt es den Befehl "tail" sprich, gebe mir die letzten X Zeilen aus.
Aber du kannst dir behelfen: http://unxutils.sourceforge.net

Dann kannst du dir damit die Differenzanzahl der Zeilen ausgeben.
Dann hättest du eine Textdatei mit allen zu löschenden Dateien. Und damit müsstest du sie ja dann löschen können.
 
Hallo

das sollte die Lösung sein
Code:
dir /b | find /c /V "~~~" >  tempfile.txt
set /p countfiles= <  tempfile.txt

if /I %countfiles% GTR 100 (goto goal1 )else (goto goal2)
:goal1
echo "net genug alte dateien"
goto :ende
:goal2
forfiles /P . /c "cmd /c echo @file" /D - 200

:ende
War schwieriger als erwartet (hab mir gedacht das mach ich in 10 minuten :freak: so kann man sich täuschen.

es wird eine temp Datei gemacht, aber ich vermute mal das wird dir egal sein..
und den Befehl "forfiles" musst halt anpassen das er net nur den Namen anzeigt sondern das er sie löscht (echo durch del ersetzen) und /D -200 gibts du die Dateien die älter als 200 Tage sind
 
Und noch ein wenig schöner (:D:p) in PowerShell:
Code:
$Path = "C:\Users\Admin\Desktop\Test"
$num = 10000

$List = (gci -Path $Path *.* | sort LastWriteTime -Descending)
$Count = (gci -Path $Path *.* | Measure-Object)
$Count = $Count.count


if($Count -gt $num){
	echo "gelöscht: " 
	echo $List | select -Last ($Count - $num)
	($List | select -Last ($Count - $num) | rm)
}
else{
	echo "zu wenig"
}
 
Vielen, vielen Danke für eure Hilfe Leute. Ihr seid echt super und hier finde ich immer Lösungen zu meinen Problemen. Ich werde jetzt mal ein paar Testläufe machen. Allerdings nur mit 5 Dateien oder so :D
Und dann das ganze produktiv schalten. Ich berichte dann später. :)
Wenn das alles klappt habt ihr mir sehr geholfen. Danke schon mal für eure Mühe.
Ergänzung ()

Ganz großes Danke an the_nobs und real_general ihr habt mir sehr geholfen.
Habe nun auf jeden Rechner auf dem das laufen soll powershell nachinstalliert (wenn XP) und dort 2-3 der Scripts abgelegt lokal die den oder die Ordner enthalten die zu überwachen sind. Dann eine batch Datei die die Skripts aufruft und diese halt dann in einem Scheduled Task jeden Tag aufgerufen wird.
Danke nochmal an alle beteiligten.

mfg
 
Zurück
Oben