daniel0-s
Goto Top

Benötige Hilfe beim löschen der Ältesten Verzeichnis-Inhaltes

Hallo ich benötige eure Hilfe bei einem Problem.
Ich bin derzeit eine Batch-Datei am schreiben die die Älteste Datei des Verzeichnisses Löscht sobald Sie die 31Datei im Verzeichnis wäre, d.H.
Sobald ein Limit von 30Dateien erreicht ist soll immer die Älteste Gelöscht werden.

Soweit so gut.
Ich hoffe ihr könnt mir weiterhelfen

Liebe Grüße Daniel

Content-Key: 188643

Url: https://administrator.de/contentid/188643

Printed on: May 5, 2024 at 12:05 o'clock

Member: bastla
bastla Jul 26, 2012 at 08:01:11 (UTC)
Goto Top
Hallo Daniel0-S und willkommen im Forum!

Ob Dir wohl zB dieser Beitrag bei Deiner Suche entgangen ist? face-wink

Grüße
bastla
Member: Daniel0-S
Daniel0-S Jul 26, 2012 at 08:09:20 (UTC)
Goto Top
Ich hab ihn schon gesehen aber alle dort genannten Beispiele bzw. Lösungsvorschläge funktionieren nicht wirklich.

Vielleicht hilft es wenn ich erstmal meinen Code Poste und man einmal drüber schaut:
@echo off & setlocal

REM Aktuelles Datum wird gesetzt:
set jahr=%date:~-4% 
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set "Ordner=C:\Benutzer\Daniel\Desktop\BATCH(ROLF)\Verzeichnis\Archiv"  
set Anzahl=30 

IF EXIST Verzeichnis goto RENAME
CD ..
MKDIR Verzeichnis
:RENAME
CD Verzeichnis
RENAME "*.txt" "ROLF_TESTDATEN_%jahr%_%monat%_%tag%.txt"  

REM Inhalt des Ordners wird ins Archiv übertragen
CD 
IF Exist Archiv goto Kopieren
MKDIR Archiv
:Kopieren 
move "*_%jahr%_%monat%_%tag%.txt" Archiv  

REM Hier kannst du deine Batch einfügen!

:Löschen
REM Hier wird die älteste Datei immer gelöscht sobald der Ordner 
REM mehr als 30 Dateien enthaelt. 
for /f "skip=%Anzahl%" "delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do set "Alt=%Ordner%\%%i"   
del "%Alt%"  
PAUSE
:ENDE
EXIT
Member: bastla
bastla Jul 26, 2012 at 09:38:10 (UTC)
Goto Top
Hallo Daniel0-S!

Soferne ich Dein Vorhaben richtig interpretiere, soll die einzige *.txt-Datei, die es im Ordner "C:\Benutzer\Daniel\Desktop\BATCH(ROLF)\Verzeichnis" gibt, (einmal am Tag) mit dem Namenszusatzz "_JJJJ_MM_TT" versehen und in den Unterordner "Archiv" verschoben werden. In diesem Unterordner sollen danach nur die jüngsten 30 *.txt-Dateien verbleiben.

Falls das so gemeint ist (mit einer Beschreibung hast Du Dich ja sehr zurückgehalten face-wink), dann etwa:
@echo off & setlocal
set "Ordner=C:\Benutzer\Daniel\Desktop\BATCH(ROLF)\Verzeichnis"  
set /a Anzahl=30

set "Archiv=%Ordner%\Archiv"  

REM Aktuelles Datum wird gesetzt:
set "jahr=%date:~-4%"  
set "monat=%date:~-7,2%"  
set "tag=%date:~-10,2%"  

md "%Archiv%" 2>nul  
for %%i in ("%Ordner%\*.txt") do move /-Y "%%i" "%Archiv%\ROLF_TESTDATEN_%jahr%_%monat%_%tag%.txt"  

REM Hier wird die älteste Datei immer gelöscht sobald der Ordner mehr als 30 Dateien enthaelt. 
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Archiv%\*.txt" 2^>nul') do del "%Archiv%\%%i"  
PAUSE
Falls der Batch unbeaufsichtigt ausgeführt werden soll, wäre einerseits "PASUE" entbehrlich und andererseits noch eine Entscheidung zu treffen, was bei mehr als einer Textdatei im "Verzeichnis" passieren sollte (mit "move /-Y" wird noch nach dem Überschreiben gefragt - ein "move" alleine würde der Reihe nach alle Textdateien verschieben und dabei kommentarlos schon bestehende Dateien ersetzen ...

Grüße
bastla

P.S.:
alle dort genannten Beispiele bzw. Lösungsvorschläge funktionieren nicht wirklich.
ist vielleicht eher vor dem Hintergrund zu sehen, dass dort zB nicht
... "skip=%Anzahl%" "delims=" ...
steht ...
Member: Daniel0-S
Daniel0-S Jul 26, 2012 at 11:06:50 (UTC)
Goto Top
So Bastla besten Dank für deine Hilfestellung habe es nun zum Laufengebracht face-smile
set "Ordner=C:\Benutzer\Daniel\Desktop\BATCH(ROLF)\Verzeichnis"  
Hier war schon der erste Fehler er erkennt "Benutzer" nicht sondern nur User
Desweiteren gab es hier noch Probleme:
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Archiv%\*.txt" 2^>nul') do del "%Archiv%\%%i"  
Die sich so Lösen ließen:
for /F "skip=%Anzahl% " %%i in ('dir /b /a-d /o-d "%Ordner%\"') do del %%i  

Liebe Grüße
Daniel face-smile