creator-x
Goto Top

Dateien in best. Verzeichnis suchen und nur die 3 Neuesten Dateien behalten

Hallo Leute,

ich hoffe mir kann jemand weiterhelfen. In Sachen Batch bin ich nicht so bewandert und brauche dringendst Hilfe.
Problem:
Ich hab ein Programm was beim beenden immer eine komplette Sicherung einer SQL Datenbank anlegt, das sind immer 2 Dateien mit so ca 1,5GB.
Doch leider kann man in dem Programm nicht einstellen das z.B. nur die letzten drei Sicherungen behalten werden sollen.
Lösungsansatz:
Ich wollte mir eine Batchdatei erstellen die den Ordner mit den Sicherungsdateien scannt und nur die 3 (6) letzten Sicherungen behält und den Rest löscht.Diese Batchdatei wollte ich beim beenden des Programms oder beim starten oder herunterfahren des Rechners ausführen lassen.
Oder in vielleicht in einen bestimmten Zeitplan.

Die Sicherungsdateien die immer zusammengehören haben den selben Namen mit den Endungen ".bak" , "bkl".


Aktuell zusammengebastelter Code:
@echo on
setlocal
set workdir="C:\Users\Creator\Documents\finance to date Backup - Kopie\"

set files=

dir %workdir% /A-D/B/OGD>%temp%files.tmp

for /f "skip=4 delims=" %i in ('dir /a-D /o-d /b *.*') do Del /y "%~i"

del %temp%files.tmp


Aber irgendwie funktioniert das ganze nicht.

ich hoffe mir kann jemand weiterhelfen.

Gruß CX

Content-Key: 276520

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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 114757
114757 05.07.2015, aktualisiert am 06.07.2015 um 09:22:33 Uhr
Goto Top
Moin,
mit Powershell z.B. ein Einzeiler
gci 'C:\Users\Creator\Documents\finance to date Backup - Kopie' -Include '*.bkf','*.bak' | ?{!$_.PSIsContainer} | group Basename | sort {$_.Group.DateCreated} -Desc | select -skip 3 | %{remove-item $_.Group.Fullname -Force}  
oder Batch
@echo off
set "workdir=C:\Users\Creator\Documents\finance to date Backup - Kopie"  
for /f "skip=6 tokens=* delims=" %%a in ('dir /B /A-D /O-D "%workdir%\*.*"') do del "%workdir%\%%a"  
Gruß jodel32
Mitglied: Dilbert-MD
Dilbert-MD 05.07.2015 um 20:37:05 Uhr
Goto Top
Hallo,
um die letzten 5 Versionen eines Verzeichnisinhaltes / einer Datei zu sichern, könnte man auch den Wochentag ermitteln (müsste irgendwas mit set DOW oder set daysofweek und tokens sein) und dann die Dateien aus dem Speicherpfad auf das Backup-Medium kopieren - in das Verzeichnis, das den aktuellen Wochentag als Verzeichnisnamen hat.

So werden alle zu sichernden Dateien am Montag in das Verzeichnis Montag kopiert usw. usf.. Somit kann man fast eine Woche zurückverfolgen. Am nächsten Montag werden die Backups der Vorwoche mit den aktuellen Dateien überschrieben.

Kann auch über den Windows Aufgabenplaner erfolgen oder - falls nur minimale batch-Kenntnisse vorhanden sind - mit 5 Batch-Dateien.
Oder eben höherem Niveau nach Jodel's Methode.

Gruß
Holger
Mitglied: Creator-X
Creator-X 05.07.2015 um 20:44:03 Uhr
Goto Top
Hallo Jodel32,

ich versuch gerad die Batchvariante. Bekomm es aber nicht hin. Die Batch liegt bei mir aufm Desk aber das sollte doch egal sein.
Wenn ich die Batch ausführe passiert nix außer das die Konsole kurz aufgeht und dann wieder schließt. ;)
Mitglied: 114757
114757 05.07.2015 aktualisiert um 20:53:14 Uhr
Goto Top
sorry kleiner Typo, ist oben korrigiert.

Und für Debugzwecke öffnet man immer manuell eine Konsole, oder fügt alternativ am Ende den Befehl Pause ein, dann sieht man auch was Probleme macht ...face-wink !
Mitglied: Creator-X
Creator-X 05.07.2015 um 21:39:48 Uhr
Goto Top
HAllo Holger,

ich will die Dateien nicht sichern. Die Sicherungsdateien sind ja schon vorhanden. Das Problem ist das das Programm die Sicherungsdateien nciht automatisch löscht oder überschreibt. Deswegen will ich das automatisch machen über Windows. so das nur die letzten Sicherungsdateien im Ordner bleiben und der Rest gelöscht wird.

Gruß CX
Mitglied: Creator-X
Creator-X 05.07.2015 aktualisiert um 21:47:51 Uhr
Goto Top
@ jodel32,

ich glaub ich mach da noch irgendwas anderes falsch. Bei mir will das nicht laufen.Hab auch schon den Pfad auf Benutzer umgestellt. geht aber auch nicht.
Hab auch die Pause drin aber da geht die Konsole auch wieder zu. Und ich seh nix.
Mitglied: Creator-X
Creator-X 05.07.2015 um 21:54:49 Uhr
Goto Top
Ah, jetzt hab ich mehr Infos bekommen.

Aber keine Ahnung warum das an der Stelle nciht verarbeitet werden kann.??

C:\Users\Creator\Desktop>Dateien_loeschen.bat

C:\Users\Creator\Desktop>set "workdir=C:\Users\Creator\Documents\finance to date
Backup - Kopie"
""skip=6 tokens=* delims="" kann syntaktisch an dieser Stelle nicht verarbeitet
werden.

C:\Users\Creator\Desktop>for "skip=6 tokens=* delims=" %a in ('dir /B /A-D /O-D
"C:\Users\Creator\Documents\finance to date Backup - Kopie\*.*"') do del "C:\Use
rs\Creator\Documents\finance to date Backup - Kopie\%a"
Mitglied: bastla
bastla 05.07.2015 um 22:45:11 Uhr
Goto Top
Hallo Creator-X und willkommen im Forum!

Das sollte natürlich (wie in Deinem ursprünglichen Ansatz) eine "for /f"-Schleife sein ...

Grüße
bastla
Mitglied: Creator-X
Creator-X 05.07.2015 um 23:03:29 Uhr
Goto Top
Hallo Bastla,

oh je, das ist mir gar nicht aufgefallen. face-smile
Aber jetzt funktionierts.

die batch schaut so aus:

@echo off
set "workdir=C:\Users\Creator\Documents\finance to date Backup - Kopie"
for /f "skip=6 tokens=* delims=" %%a in ('dir /B /A-D /O-D "%workdir%\*.*"') do del "%workdir%\%%a"

Kann mir vielleicht noch jemand erklären was das tokens und delims macht. Und wofür /B /A-D /O-D steht?

Gruß MArco
Mitglied: 114757
114757 06.07.2015 aktualisiert um 09:35:12 Uhr
Goto Top
Moin Marco,
Kann mir vielleicht noch jemand erklären was das tokens und delims macht. Und wofür /B /A-D /O-D steht?
tokens bestimmt welche Bestandteile der Zeile getrennt durch die Zeichen welche bei delim angeben werden, in Variablen landen. In diesem Fall wollen wir die ganze Zeile in einer Variablen haben, deshalb gibt man keinen Delimiter an und setzt tokens auf *. In diesem Fall könnte man tokens auch weglassen wenn man für den Delimiter ein leeres Zeichen angibt.
skip überspringt einfach am Anfang die angegebene Anzahl an Zeilen.

Die Parameter des DIR-Befehls machen folgendes
/B = Benutzt das einfache Ausgabeformat bei dem nur die Datei-/Ordnernamen untereinander aufgelistet werden.
A-D = schließt Ordner in der Auflistung aus, so dass nur Dateien angezeigt werden.
/O-D = Sortiert die Dateien in absteigender Reihenfolge anhand des Datums, so dass neuere Dateien ganz oben stehen.

Steht auch alles schön beschrieben wenn du auf der Konsole mal ein dir /? eingibst.

Und sorry, für das unterschlagene /f face-smile

Gruß jodel32
Mitglied: Creator-X
Creator-X 06.07.2015 um 23:13:38 Uhr
Goto Top
Hallo Jodel32,

np mit /f. face-smile

Danke für die Erläuterung. Werd mir das mit der Hilfe "/?" bei Gelegenheit mal zur Gemüt ziehen. Das Script funktioniert fabelhaft. und ist so einfach. Ich bin begeistert. Ich komm aus dem Bereich VBA da ist das a weng anders.

Trotzdem danke euch für die Hilfe.

Gruß CX face-smile