Jump to content

DOS Commands zum Erkennen spezieller Verzeichnisse


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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!

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...