Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Im Backupordner mittels cmd alle Backups, außer den letzen drei löschen

Frage Entwicklung Batch & Shell

Mitglied: user2009

user2009 (Level 1) - Jetzt verbinden

12.01.2010, aktualisiert 12:43 Uhr, 9121 Aufrufe, 10 Kommentare

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 :
01.
@echo off 
02.
:start 
03.
CLS 
04.
setlocal 
05.
 
06.
::  DateTime von Biber version 0.08 
07.
set DateTime= 
08.
Call GetAllDateTimeInfos /s 
09.
set "DateTime=%JJ%-%MM%-%TT%__%hh%-%min%" 
10.
Call GetAllDateTimeInfos /u 
11.
 
12.
If /i [%1]==[/?] goto Syntax  
13.
 
14.
:: zum Testen die verzeichnisstruktur kopieren 
15.
:: xcopy e:\daten e:\daten_test /t /e 
16.
 
17.
: * ZIEL * 
18.
 
19.
set "Bak_Ordner1=e:\daten_bak\Daten_7z" 
20.
md %Bak_Ordner1%\%DateTime% 
21.
set "Bak_Ordner2=e:\daten_bak\%DateTime%"  
22.
set "Destination=%Bak_Ordner2%\daten.7z" 
23.
 
24.
: * QUELLE * 
25.
set "Source=e:\daten\*" 
26.
 
27.
: * INCLUDE * 
28.
set "Include=@include.lst" 
29.
:: INHALT include.lst 
30.
rem #kommentar 
31.
rem E:\Daten1\ 
32.
rem E:\Daten2\ 
33.
 
34.
: * EXCLUDE * 
35.
rem list files: UTF-8 is default encoding | -scs switch 
36.
set "Exclude=@exclude.lst" 
37.
::set "Exclude=@\path\sub\exclude.lst" 
38.
:: INHALT exclude.lst 
39.
rem #kommentar 
40.
rem temp\ 
41.
rem #private Ordner, die "privat" im Namen haben, ausschliessen 
42.
rem *Privat\* 
43.
 
44.
REM * GROESSE DER ZIPs * 
45.
set "Groesse=1024" rem ... in Megabyte 
46.
 
47.
 
48.
:Suche1 
49.
color 0A 
50.
echo. 
51.
echo Daten in Paketen zu jeweils %Groesse% MB packen: 
52.
echo ............................................ && echo. 
53.
 
54.
7za a -t7z -bd -r "-ir%Include%" "-xr%Exclude%" -scsWIN -v%Groesse%m %Destination% %Source% 
55.
rem a ... add 
56.
rem -t7z | -tzip ... Format 
57.
rem -bd ... prozentuale Fortschrittsanzeige aus (schneller?) 
58.
rem -r ... Verzeichnisse rekursiv abarbeiten 
59.
rem -scs{UTF-8 | WIN | DOS} ...Sets charset for list files 
60.
rem -ai[r[-|0]]{@listfile|!wildcard}: Include archives 
61.
rem -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives 
62.
 
63.
: * LIST archiv * 
64.
rem bei multivolume archiven immer die erste datei mit 7z aufrufen 
65.
:: 7za l E:\Daten_Bak\Daten_7z\2010-01-11__16-51\daten.7z.001 
66.
 
67.
: * EXTRACT * 
68.
:: 7za x E:\Daten_Bak\Daten_7z\2010-01-11__16-51\daten.7z.001 -oe:\Ordner1 *.log -r 
69.
rem alle log-daten nach e:\Ordner1 entpacken 
70.
 
71.
:DELETE 
72.
call del 
73.
 
74.
endlocal 
75.
:: echo. && pause && echo. && echo. 
76.
 
77.
 
78.
:EOF 
79.
pause>nul 
80.
 
81.
::DELETE 
82.
:DEL 
83.
::set "Del_Ordner=e:\daten_bak\Daten_7z" 
84.
set "Del_Ordner=%Bak_Ordner1%" 
85.
if not exist e:\Temp_bak md e:\Temp_bak 
86.
 
87.
robocopy %Del_Ordner%\ e:\Temp_bak\  /minage:7  /XJ 
88.
:: /MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date. 
89.
:: /MINAGE:n :: MINimum file AGE - exclude files newer than n days/date. 
90.
 
91.
rem ---> 
92.
rem dauert viel zulange und frisst ressourcen 
93.
rem wenn in den den letzen 7 tagen kein backup lief, dann ist alles weg :-( 
94.
 
95.
rd "e:\Temp_bak\" /S /Q 
96.
rem löschen mit remove directory ... 
97.
:: für Dateien: 
98.
:: del e:\Temp_bak\ 
99.
:: del "Zielpfad\*.* /S /F 
100.
:: /S == Unterverzeichnisse 
101.
:: /F == Löschen erzwingen

Hat jemand bitte einen Vorschlag....

Viele Grüße
user09
Mitglied: TheDarkLord
12.01.2010 um 13:45 Uhr
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
Bitte warten ..
Mitglied: user2009
12.01.2010 um 14:13 Uhr
Hallo Dark,

danke für Deine Antwort.
Für obige cmd habe ich ewig gebraucht.

Habe jetzt keinen Plan für Deinen Vorschlag:
Dann ließ die letzten 3 Zeilen (= Backupname) in jeweils eine Variable ein und schließe diese Dateien dann vom Löschen aus.

Wenn jemand diesen Threat liest und etwas ähnliches schon gemacht hat oder sonst helfen kann, dann bitte antworten.
Bitte warten ..
Mitglied: TheDarkLord
12.01.2010 um 14:52 Uhr
Hallo

Ja kein Problem, ich hab gerade ein wenig Zeit, ich schau mir das mal an und poste Dir dann nen passenden Code-Schnipsel.

Bis bald!
Bitte warten ..
Mitglied: Biber
12.01.2010 um 15:15 Uhr
Moin user2009,

mit dem Abfeuern der Zeile
01.
FOR /F "skip=7 delims=" %i in ('Dir /ad /b /o-d d:\temp') do @echo rd "%i" /s /q
...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
Bitte warten ..
Mitglied: TheDarkLord
12.01.2010 um 15:53 Uhr
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
01.
:: Das Script darf natürlich NICHT in dem Ordner liegen, wo die zu löschenden Backups sind, sonst wirds ja mit gelöscht :) 
02.
 
03.
set "PFAD=Ordner-indem-die-zu-löschenden-backups-drin-sind" 
04.
 
05.
:: Schreibt den Ordnerinhalt in die temp. Datei, das neuste ganz oben 
06.
dir %PFAD% /b /O:-D > %temp%\dirlist.txt 
07.
 
08.
:: Schreibt die erste Zeile in DATEI1 
09.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ %temp%\dirlist.txt') do @( 
10.
        for /L %%a in (1,1,1) do @if %%i==%%a @set DATEI1=%%j 
11.
12.
 
13.
:: Schreibt die zweite Zeile in DATEI2 
14.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ %temp%\dirlist.txt') do @( 
15.
        for /L %%a in (2,1,2) do @if %%i==%%a @set DATEI2=%%j 
16.
17.
 
18.
:: Schreibt die dritte Zeile in DATEI3 
19.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ %temp%\dirlist.txt') do @( 
20.
        for /L %%a in (3,1,3) do @if %%i==%%a @set DATEI3=%%j 
21.
22.
 
23.
:: Erstellt einen temp. backup-ordner 
24.
mkdir "%PFAD%\temp" 
25.
 
26.
:: Verschiebt die 3 letzten Backups in den temp Ordner 
27.
move "%PFAD%\%DATEI1%" %PFAD%\temp\ 
28.
move "%PFAD%\%DATEI2%" %PFAD%\temp\ 
29.
move "%PFAD%\%DATEI3%" %PFAD%\temp\ 
30.
 
31.
:: Löscht alle Dateien im eingangs angegeben Ordner 
32.
echo j | del %PFAD%\* 
33.
 
34.
:: Verschiebt die zu 3 letzten Backups zurück und entfernt den temp Ordner 
35.
cd %PFAD% 
36.
move backup\* ./ 
37.
rd backup
Gruß Dark
Bitte warten ..
Mitglied: Biber
12.01.2010 um 16:15 Uhr
Moin derDunkleLurch,

Zitat von TheDarkLord:
Du warst schneller
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
Bitte warten ..
Mitglied: user2009
13.01.2010 um 01:23 Uhr
Hallo Biber,
vielen Dank es klappt super:
01.
set "PFAD=d:\temp1" 
02.
 
03.
echo "Unterordner löschen" 
04.
FOR /F "skip=3 delims=" %%i in ('Dir /ad /b /o-d %PFAD%') do (@echo rd "%PFAD%\%%i" /s /q) 
05.
:: vom CMD-Pompt aus würden alle Verzeichnisse unterhalb von D:\temp ausgenommen die 3 
06.
:: jüngsten gelöscht (bzw das Löschen mit "ECHO rd" angezeigt). 
07.
pause 
08.
 
09.
echo. 
10.
echo "Backup-Dateien löschen" 
11.
FOR /F "skip=3 delims=" %%i in ('Dir /a-d /b /o-d %PFAD%\') do (@echo del "%PFAD%\%%i" /s /q &&echo "%%i">>del.txt) 
12.
:: neu:  dir /a-d  und del "%%i" 
13.
pause
Gruß
user2009
Bitte warten ..
Mitglied: user2009
13.01.2010 um 01:32 Uhr
Hallo Dark,

vielen Dank für das Script es läuft 1A!

Gruß
user2009
Bitte warten ..
Mitglied: TheDarkLord
13.01.2010 um 10:43 Uhr
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:

01.
:: Das Script darf natürlich NICHT in dem Ordner liegen, wo die zu löschenden Backups sind, sonst wirds ja mit gelöscht :) 
02.
 
03.
set "PFAD=Ordner-indem-die-zu-löschenden-backups-drin-sind" 
04.
 
05.
:: Schreibt den Ordnerinhalt in die temp. Datei, das neuste ganz oben 
06.
dir %PFAD% /b /O:-D > %temp%\dirlist.txt 
07.
 
08.
:: Schreibt die erste Zeile in DATEI1 
09.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ %temp%\dirlist.txt') do @( 
10.
        for /L %%a in (1,1,1) do @if %%i==%%a @set DATEI1=%%j 
11.
12.
 
13.
:: Schreibt die zweite Zeile in DATEI2 
14.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ %temp%\dirlist.txt') do @( 
15.
        for /L %%a in (2,1,2) do @if %%i==%%a @set DATEI2=%%j 
16.
17.
 
18.
:: Schreibt die dritte Zeile in DATEI3 
19.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ %temp%\dirlist.txt') do @( 
20.
        for /L %%a in (3,1,3) do @if %%i==%%a @set DATEI3=%%j 
21.
22.
 
23.
:: Erstellt einen temp. backup-ordner 
24.
mkdir "%PFAD%\temp" 
25.
 
26.
:: Verschiebt die 3 letzten Backups in den temp Ordner 
27.
move "%PFAD%\%DATEI1%" %PFAD%\temp\ 
28.
move "%PFAD%\%DATEI2%" %PFAD%\temp\ 
29.
move "%PFAD%\%DATEI3%" %PFAD%\temp\ 
30.
 
31.
:: Löscht alle Dateien im eingangs angegeben Ordner 
32.
echo j | del %PFAD%\* 
33.
 
34.
:: Verschiebt die 3 letzten Backups zurück und entfernt den temp Ordner 
35.
cd %PFAD% 
36.
move temp\* ./ 
37.
rd temp 
38.
del %temp%\dirlist.txt 
Gruß Dark
Bitte warten ..
Mitglied: user2009
13.01.2010 um 12:04 Uhr
Hallo Dark,

del %temp%\dirlist.txt
o.k.

Ja für Logs, die man sich selbst zusammen baut, ist das Script gut geeignet.

Um jedoch Unterordner auszusortieren und zu verschieben sollte nicht %PFAD%\temp, sondern ein %neuerPFAD% verwendet werden und statt mit "move" lieber mit "robocopy.exe .... /move" gearbeitet werden.

(Zur automatischen Unterscheidung, ob es sich um Dateien oder Verzeichnisse handelt gibt es diesen "forfiles"-Code:
01.
:: console  
02.
FOR /F "delims=" %i in ('forfiles /s /c "CMD /C if @ISDIR==TRUE echo @FILE ist ein Verzeichnis"') do (pause && goto robocopy)
)

Also Danke noch mal und Gruß
User2009
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(2)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Exchange Server
gelöst SBS2011 - im Exchange mobile Geräte löschen (4)

Frage von MiSt zum Thema Exchange Server ...

Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

iOS
SPAM Einladungen im iCloud Kalender löschen (1)

Tipp von Frank zum Thema iOS ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...