Jump to content

Datenverzeichnis nach Datum aufräumen (mit Ausnahmen)


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

Empfohlene Beiträge

Geschrieben

Hallo

 

Ich möchte ein Verzeichnis nach Datum aufräumen (mit Ausnahmen), und zwar aufräumen = löschen.

 

Unterhalb von D:\Daten exisitiert eine Ablage

d:\daten\AbtA\MitarbeiterA

d:\daten\AbtA\MitarbeiterB

d:\daten\Projekt1\Planung

d:\daten\Projekt1\Phase1

...

 

Alles unterhalb von d:\Daten soll nach Zeitablauf gelöscht werden (z.B. 90 Tage), mit Ausnahmen, z.B. das Verzeichnis d:\daten\Projekt1\Planung soll ewig leben wie auch d:\daten\AbtA\MitarbeiterB

 

Ich dachte erst an was wie

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}

aber das putzt gnadenlos alles ab, auch die priviligierten Verzeichnisse.

 

Wie setzt man einen "Filter" um, dass eben (z.B.) d:\daten\Projekt1\Planung immer bleibt?

 

Ciao

Geschrieben

Im Script oder als Txt Datei und bindest diese ein.

Im Script geht das z.B. mit -exclude bei get-childitem.

Das mit der Text Datei geht dafür nicht so einfach ist aber flexibler. Du machst eine Schleife über alle Rootordner und vergleichst jeden Ordner mit der Liste aus der Textdatei (get-content ist dein Freund).

Geschrieben

Ich bin halt unsicher, was wo wie geht.

Für Linux-Shellscripte kann ich hier im Haus jemand fragen, aber Windows-technisch bin ich hier allein auf weiter Flur.

foreach als Pendant zu CMD: for %i in klappt schon,

 

Muss ich für jede Datei eine eigene Schleife über die Textdatei machen (= zwei Schleifen, verschachtelt) oder gehts mit einer Schleife (wenn -exclude auch mit ner Textdatei kann)?

Geschrieben

Du musst für jeden Root Ordner eine Schleife über die Txt Datei machen.

 

Gibt es auch Ausnahmen, die tiefer gehen als 3 Ordner?

 

foreach($ebene1 in (Get-ChildItem D:\ | ? { $_.PsIsContainer })){
  foreach($ebene2 in (Get-ChildItem $ebene1 | ? { $_.PsIsContainer })){
     $ebene2.FullName
     #Hier der Vergleich mit der Txtdatei
  }
}

#Hier nochmals eine Schleife für alle gefundenen Ordner mit deinem Code.

Geschrieben

> Gibt es auch Ausnahmen, die tiefer gehen als 3 Ordner?

 

Kann schon sein, z.B. d:\daten\AbtA\ProjektA\Software soll bleiben (Dateien und der Ordner selbst), aber d:\daten\AbtA\ProjektA\Logs soll nach 90 Tagen leer sein (der Ordner kann ruhig bleiben, muss aber nicht)

 

Am liebsten wäre mir eine Datei "mussbleiben.txt" die einfach den vollen Pfad zu vielen Dateien enthält (beliebiger Tiefe).

 

> Hier der Vergleich mit der Txtdatei

Wie mache ich den?

Geschrieben

Je tiefer du gehst desto mehr Schleifen brauchst du. Außer du machst das ganze mit -recurse, dann musst du aber jede Datei und jeden Ordner vergleichen (kann je nach Anzahl der Daten auch sehr lange dauern).

 

Vergleich:

foreach($check in (get-content ausnahmen.txt)){
  if(!($ebene2.FullName -match $check)){
     #Datei ist NICHT in den Ausnahmen, muss hier gespeichert werden (z.B. in ein extra Array) um es danach im 2. Teil weiterzubearbeiten.
  }
}

Geschrieben

Ich nutze nur $check. Bei den ebenen braucht man mehrere Variablen (es geht auch mit $_, wird aber auf Dauer unübersichtlich und das geht auch nur bei foreach-object und nicht bei foreach).

 

Wie wärs wenn du dir mal die Grundlagen aneignest?

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...