Im Backupordner mittels cmd alle Backups, außer den letzen drei löschen
Bisher werden Daten unregelmäßig in einen Ordner "name_YY-MM-TT_h-i" gesichert (mittels 7zip oder robocopy).
Nun sollen ab und an die alten Backups gelöscht werden, aber nicht nach Zeit (alles was älter als 7 Tage ist weg), sondern es sollen die aktuellsten X (z.B. 3) Backupordner erhalten bleiben.
Hallo zusammen!
Bisher werden Daten unregelmäßig in einen Ordner "name_YY-MM-TT_h-i" gesichert (mittels 7zip oder robocopy).
Nun sollen ab und an die alten Backups gelöscht werden, aber nicht nach Zeit (alles was älter als 7 Tage ist weg), sondern es sollen die aktuellsten X (z.B. 3) Backupordner erhalten bleiben.
Bisher wird mit 7za.exe, GetAllDateTimeInfos.cmd und dieser cmd gesichert :
Hat jemand bitte einen Vorschlag....
Viele Grüße
user09
Nun sollen ab und an die alten Backups gelöscht werden, aber nicht nach Zeit (alles was älter als 7 Tage ist weg), sondern es sollen die aktuellsten X (z.B. 3) Backupordner erhalten bleiben.
Hallo zusammen!
Bisher werden Daten unregelmäßig in einen Ordner "name_YY-MM-TT_h-i" gesichert (mittels 7zip oder robocopy).
Nun sollen ab und an die alten Backups gelöscht werden, aber nicht nach Zeit (alles was älter als 7 Tage ist weg), sondern es sollen die aktuellsten X (z.B. 3) Backupordner erhalten bleiben.
Bisher wird mit 7za.exe, GetAllDateTimeInfos.cmd und dieser cmd gesichert :
@echo off
:start
CLS
setlocal
:: DateTime von Biber version 0.08
set DateTime=
Call GetAllDateTimeInfos /s
set "DateTime=%JJ%-%MM%-%TT%__%hh%-%min%"
Call GetAllDateTimeInfos /u
If /i [%1]==[/?] goto Syntax
:: zum Testen die verzeichnisstruktur kopieren
:: xcopy e:\daten e:\daten_test /t /e
: * ZIEL *
set "Bak_Ordner1=e:\daten_bak\Daten_7z"
md %Bak_Ordner1%\%DateTime%
set "Bak_Ordner2=e:\daten_bak\%DateTime%"
set "Destination=%Bak_Ordner2%\daten.7z"
: * QUELLE *
set "Source=e:\daten\*"
: * INCLUDE *
set "Include=@include.lst"
:: INHALT include.lst
rem #kommentar
rem E:\Daten1\
rem E:\Daten2\
: * EXCLUDE *
rem list files: UTF-8 is default encoding | -scs switch
set "Exclude=@exclude.lst"
::set "Exclude=@\path\sub\exclude.lst"
:: INHALT exclude.lst
rem #kommentar
rem temp\
rem #private Ordner, die "privat" im Namen haben, ausschliessen
rem *Privat\*
REM * GROESSE DER ZIPs *
set "Groesse=1024" rem ... in Megabyte
:Suche1
color 0A
echo.
echo Daten in Paketen zu jeweils %Groesse% MB packen:
echo ............................................ && echo.
7za a -t7z -bd -r "-ir%Include%" "-xr%Exclude%" -scsWIN -v%Groesse%m %Destination% %Source%
rem a ... add
rem -t7z | -tzip ... Format
rem -bd ... prozentuale Fortschrittsanzeige aus (schneller?)
rem -r ... Verzeichnisse rekursiv abarbeiten
rem -scs{UTF-8 | WIN | DOS} ...Sets charset for list files
rem -ai[r[-|0]]{@listfile|!wildcard}: Include archives
rem -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
: * LIST archiv *
rem bei multivolume archiven immer die erste datei mit 7z aufrufen
:: 7za l E:\Daten_Bak\Daten_7z\2010-01-11__16-51\daten.7z.001
: * EXTRACT *
:: 7za x E:\Daten_Bak\Daten_7z\2010-01-11__16-51\daten.7z.001 -oe:\Ordner1 *.log -r
rem alle log-daten nach e:\Ordner1 entpacken
:DELETE
call del
endlocal
:: echo. && pause && echo. && echo.
:EOF
pause>nul
::DELETE
:DEL
::set "Del_Ordner=e:\daten_bak\Daten_7z"
set "Del_Ordner=%Bak_Ordner1%"
if not exist e:\Temp_bak md e:\Temp_bak
robocopy %Del_Ordner%\ e:\Temp_bak\ /minage:7 /XJ
:: /MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
:: /MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
rem --->
rem dauert viel zulange und frisst ressourcen
rem wenn in den den letzen 7 tagen kein backup lief, dann ist alles weg :-(
rd "e:\Temp_bak\" /S /Q
rem löschen mit remove directory ...
:: für Dateien:
:: del e:\Temp_bak\
:: del "Zielpfad\*.* /S /F
:: /S == Unterverzeichnisse
:: /F == Löschen erzwingen
Hat jemand bitte einen Vorschlag....
Viele Grüße
user09
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 133243
Url: https://administrator.de/forum/im-backupordner-mittels-cmd-alle-backups-ausser-den-letzen-drei-loeschen-133243.html
Ausgedruckt am: 07.01.2025 um 04:01 Uhr
10 Kommentare
Neuester Kommentar
Hallo
Nur so als kleiner Gedankenblitz:
Lies doch mit "dir /b /O:D > %temp%\dirlist.txt" den Inhalt des Backupverzeichnisses in eine Datei, das aktuellste Datum am Ende.
Dann ließ die letzten 3 Zeilen (= Backupname) in jeweils eine Variable ein und schieße diese Dateien dann vom Löschen aus.
Vielleicht hilft Dir der Denkanstoß weiter...
Gruß Dark
Nur so als kleiner Gedankenblitz:
Lies doch mit "dir /b /O:D > %temp%\dirlist.txt" den Inhalt des Backupverzeichnisses in eine Datei, das aktuellste Datum am Ende.
Dann ließ die letzten 3 Zeilen (= Backupname) in jeweils eine Variable ein und schieße diese Dateien dann vom Löschen aus.
Vielleicht hilft Dir der Denkanstoß weiter...
Gruß Dark
Moin user2009,
mit dem Abfeuern der Zeile
...vom CMD-Pompt aus würden alle Verzeichnisse unterhalb von D:\temp ausgenommen die 7 jüngsten gelöscht (bzw das Löschen mit "ECHO rd" angezeigt).
Das sollte bei dir auch "aus dem Handgelenk" gehen, wenn du die Zeile einmailg verstanden hast.
Hint: Hilfe gibt es auch mit DIR/? und /FOR/? und /RD/?
Grüße
Biber
mit dem Abfeuern der Zeile
FOR /F "skip=7 delims=" %i in ('Dir /ad /b /o-d d:\temp') do @echo rd "%i" /s /q
Das sollte bei dir auch "aus dem Handgelenk" gehen, wenn du die Zeile einmailg verstanden hast.
Hint: Hilfe gibt es auch mit DIR/? und /FOR/? und /RD/?
Grüße
Biber
Du warst schneller
Er sagte, dass er nicht mit dem Datum arbeiten will, falls längere Zeit kein Backup gemacht wurde, aber das ist ja bei Dir kein Problem.
Du löscht ja nicht alles was älter ist als X sondern alles ausser die letzten X Backups.
Aber handelt es sich nicht um Backup-Dateien? Du schreibst was von UnterORDNERN ?!
Ich hab mal wieder viel zu kompliziert gedacht und alles sehr umständlich geschrieben, funktioniert aber auch
Gruß Dark
Er sagte, dass er nicht mit dem Datum arbeiten will, falls längere Zeit kein Backup gemacht wurde, aber das ist ja bei Dir kein Problem.
Du löscht ja nicht alles was älter ist als X sondern alles ausser die letzten X Backups.
Aber handelt es sich nicht um Backup-Dateien? Du schreibst was von UnterORDNERN ?!
Ich hab mal wieder viel zu kompliziert gedacht und alles sehr umständlich geschrieben, funktioniert aber auch
:: Das Script darf natürlich NICHT in dem Ordner liegen, wo die zu löschenden Backups sind, sonst wirds ja mit gelöscht :)
set "PFAD=Ordner-indem-die-zu-löschenden-backups-drin-sind"
:: Schreibt den Ordnerinhalt in die temp. Datei, das neuste ganz oben
dir %PFAD% /b /O:-D > %temp%\dirlist.txt
:: Schreibt die erste Zeile in DATEI1
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %temp%\dirlist.txt') do @(
for /L %%a in (1,1,1) do @if %%i==%%a @set DATEI1=%%j
)
:: Schreibt die zweite Zeile in DATEI2
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %temp%\dirlist.txt') do @(
for /L %%a in (2,1,2) do @if %%i==%%a @set DATEI2=%%j
)
:: Schreibt die dritte Zeile in DATEI3
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %temp%\dirlist.txt') do @(
for /L %%a in (3,1,3) do @if %%i==%%a @set DATEI3=%%j
)
:: Erstellt einen temp. backup-ordner
mkdir "%PFAD%\temp"
:: Verschiebt die 3 letzten Backups in den temp Ordner
move "%PFAD%\%DATEI1%" %PFAD%\temp\
move "%PFAD%\%DATEI2%" %PFAD%\temp\
move "%PFAD%\%DATEI3%" %PFAD%\temp\
:: Löscht alle Dateien im eingangs angegeben Ordner
echo j | del %PFAD%\*
:: Verschiebt die zu 3 letzten Backups zurück und entfernt den temp Ordner
cd %PFAD%
move backup\* ./
rd backup
Gruß Dark
Moin derDunkleLurch,
Ja, aber....diese Anforderung hatten wir auch schon ein paar Male hier im Forum...
Dann also statt DIR-Parameter /Ad genau umgekehrt (/a-d) und statt [RD Unterverzeichnis "%~i"] natürlich ein einfaches [del Datei "%~i"].
Grüße
Biber
Ja, aber....diese Anforderung hatten wir auch schon ein paar Male hier im Forum...
Aber handelt es sich nicht um Backup-Dateien? Du schreibst was von UnterORDNERN ?!
Doch, da hast du Recht. Ich hatte zu flüchtig gelesen. ...Dann also statt DIR-Parameter /Ad genau umgekehrt (/a-d) und statt [RD Unterverzeichnis "%~i"] natürlich ein einfaches [del Datei "%~i"].
Grüße
Biber
Hallo
Danke für die Blumen xD
Hatte noch nen Fehler im Script, für den Fall, dass Du (oder jemand anderes) das umfangreichere von mir nehmen möchte, weil man da noch einiges zwischen basteln kann wie nen Log, welche Datei die aktuellste ist bzw. wann das letzte Backup lief etc:
Gruß Dark
Danke für die Blumen xD
Hatte noch nen Fehler im Script, für den Fall, dass Du (oder jemand anderes) das umfangreichere von mir nehmen möchte, weil man da noch einiges zwischen basteln kann wie nen Log, welche Datei die aktuellste ist bzw. wann das letzte Backup lief etc:
:: Das Script darf natürlich NICHT in dem Ordner liegen, wo die zu löschenden Backups sind, sonst wirds ja mit gelöscht :)
set "PFAD=Ordner-indem-die-zu-löschenden-backups-drin-sind"
:: Schreibt den Ordnerinhalt in die temp. Datei, das neuste ganz oben
dir %PFAD% /b /O:-D > %temp%\dirlist.txt
:: Schreibt die erste Zeile in DATEI1
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %temp%\dirlist.txt') do @(
for /L %%a in (1,1,1) do @if %%i==%%a @set DATEI1=%%j
)
:: Schreibt die zweite Zeile in DATEI2
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %temp%\dirlist.txt') do @(
for /L %%a in (2,1,2) do @if %%i==%%a @set DATEI2=%%j
)
:: Schreibt die dritte Zeile in DATEI3
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %temp%\dirlist.txt') do @(
for /L %%a in (3,1,3) do @if %%i==%%a @set DATEI3=%%j
)
:: Erstellt einen temp. backup-ordner
mkdir "%PFAD%\temp"
:: Verschiebt die 3 letzten Backups in den temp Ordner
move "%PFAD%\%DATEI1%" %PFAD%\temp\
move "%PFAD%\%DATEI2%" %PFAD%\temp\
move "%PFAD%\%DATEI3%" %PFAD%\temp\
:: Löscht alle Dateien im eingangs angegeben Ordner
echo j | del %PFAD%\*
:: Verschiebt die 3 letzten Backups zurück und entfernt den temp Ordner
cd %PFAD%
move temp\* ./
rd temp
del %temp%\dirlist.txt
Gruß Dark