Jump to content
Sign in to follow this  
Bernhard_MUC

DOS Commands zum Erkennen spezieller Verzeichnisse

Recommended Posts

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

Share this post


Link to post

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!

Share this post


Link to post

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.

Share this post


Link to post

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

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...