Bernhard_MUC 10 Geschrieben 18. September 2006 Melden Teilen Geschrieben 18. September 2006 Hallo, habe mir eine Batch Datei geschrieben, die Sicherungen meines Rechners in Verzeichnissen (Name des Verzeichnisses YYYY_MM_DD) ablegt. In DOS sieht das in etwa so aus: set CURRENT_YEAR=%date:~6,4% set CURRENT_MONTH=%date:~3,2% set CURRENT_DAY=%date:~0,2% set CURRENT_DIRNAME=%CURRENT_YEAR%_%CURRENT_MONTH%_%CURRENT_DAY% etc ... Das funktioniert auch prächtig ... das Sichern ... aber diese Sicherungen muss ich nun immer manuell löschen. Meine Frage ist sich nun, wie kann ich diese Verzeichnisse YYYY_MM_DD nach z.B. 10 Tagen löschen? Es sollten immer die aktuellen letzten 10 Tage vorhanden bleiben. Man könnte einerseits den Namen der Verzeichnisse parsen, oder auf dessen Erstellungsdatum zurückgreifen. Dabei fehlen mir die DOS Kenntnisse, oder es existieren solche Möglichkeiten evtl. auch garnicht. Desweiteren wird es schwierig von einem Datum 10 abzuziehen. Hmm ... je länger ich darüber nachdeke, ist es wohl einfacher ein Programm zu schreiben, was das erledigt, beim Skripten kann es ganz schön kompliziert werden, oder hat evtl. jemand einen Vorschlag? Wäre toll und hilfreich! Vielen Dank im Voraus! Bernhard Zitieren Link zu diesem Kommentar
Finanzamt 76 Geschrieben 19. September 2006 Melden Teilen Geschrieben 19. September 2006 Hallo und willkommen an Board! Google mal nach "Batch Enhancer", vielleicht wirst Du fündig. Weiter kenne ich ein Programm Count von Horst Schaeffer, zu dem ich aber den Hinweis habe, es funktioniere nicht unter unter XP - vielleicht kannst Du da was mit einer Emulation machen. Unabhängig davon könntest Du das Sichern und Löschen revolvierend lösen. Lege im Verzeichnis Deiner Batch eine Datei namens RUN01.TXT an und steuere durch Umbenennen dieser Datei: @ECHO OFF IF EXIST RUN01.TXT SET SafeDir=VerzeichnisName01 & DATE /T >> RUN01.TXT & REN RUN01.TXT RUN02.TXT & GOTO Backups IF EXIST RUN02.TXT SET SafeDir=VerzeichnisName02 & DATE /T >> RUN01.TXT & REN RUN02.TXT RUN02.TXT & GOTO Backups IF EXIST RUN03.TXT SET SafeDir=VerzeichnisName03 & DATE /T >> RUN01.TXT & REN RUN03.TXT RUN02.TXT & GOTO Backups ... IF EXIST RUN10.TXT SET SafeDir=VerzeichnisName10 & DATE /T >> RUN01.TXT & REN RUN01.TXT RUN02.TXT & GOTO Backups :Backups REM ggf. Wechsel in das Sicherungslaufwerk, z.B. G: G: REM ggf. Deltree %SafeDir% CD %SafeDir% DEL *.* /S /Q REM ggf. MD %SafeDir% REM Sicherungsroutine einkopieren, dabei Ziellaufwerk in %SafeDir% ändern In der Datei RUNxx.TXT steht in der letzten Zeile das Datum der letzten Sicherung und am xx kannst Du erkennen, von wo Du ggf. rücksichern mußt. Gegrüßt! Zitieren Link zu diesem Kommentar
marka 587 Geschrieben 19. September 2006 Melden Teilen Geschrieben 19. September 2006 Ich habe da mal ein vb-script in den Fingern gehabt, welches in vorgegebenen Verzeichnissen Dateien, die älter als x Tage sind, löscht, wenn ich es finde, poste ich den Quelltext. Zitieren Link zu diesem Kommentar
Bernhard_MUC 10 Geschrieben 19. September 2006 Autor Melden Teilen Geschrieben 19. September 2006 Hallo, Vielen Dank für den Hinweis, mit dem obigen Skript könnte man es wohl auch gut machen, evtl. dann auch mit festen Verzeichnisnamen. Habe mich gestern jedoch noch in Ungeduldigkeit geübt und wie schon angesprochen ein keines C# Programm geschrieben, das genau meine Verzeichnisnamen (YYYY_MM_DD) durchforstet und checkt, muss halt mir dem übergeordneten Verzeichnisnamen als Befehlszeilenargument aufgerufen werden: using System; using System.IO; namespace ClearBackup { class MainClass { [sTAThread] static void Main(string[] args) { if (args.GetLength(0) > 0) { string sDirectoryToClear = args[0]; if (!Directory.Exists(sDirectoryToClear)) return; string[] sDirectories = Directory.GetDirectories(sDirectoryToClear); for (int i = 0; i < sDirectories.GetLength(0); i++) { int iTokenCount = Util.String.GetTokenCount(sDirectories[i], @"\"); string sDirectoryToCheck = Util.String.GetToken(iTokenCount - 1, sDirectories[i], @"\"); if (sDirectoryToCheck.Length >= 10) { string sY = sDirectoryToCheck.Substring(0, 4); string sM = sDirectoryToCheck.Substring(5, 2); string sD = sDirectoryToCheck.Substring(8, 2); if (Util.String.IsNumeric(sY) && Util.String.IsNumeric(sM) && Util.String.IsNumeric(sD)) { DateTime dtDirectory = new DateTime(Convert.ToInt32(sY), Convert.ToInt32(sM), Convert.ToInt32(sD)); if (dtDirectory.AddDays(10) < DateTime.Now) Directory.Delete(sDirectories[i], true); } } } } else return; } } } wenn Ihr noch etwas einfacheres habt, ist es willkommen, hatte nur in der Datumsbrechnung unter DOS ein KO-Kriterium gesehen. Gruß Bernhard Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.