DerFranky 10 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 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 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 Ich würde das in 2 Schritten erledigen. Einmal alle "Root" Ordner (sprich ohne -recurse) ohne die Ausnahmen und danach für jeden Root Ordner dein Code (angepasst) nutzen. Zitieren Link zu diesem Kommentar
DerFranky 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 Wie / wo definiere ich die Ausnahmen? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 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). Zitieren Link zu diesem Kommentar
DerFranky 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 Das mit der Textdatei klingt schon mal gut, aber wie mache ich die zwei Schleifen? Oder geht das in einer Schleife? Mein obiger Code stammt von PowerShell: delete files older than x days | Networknet.nl Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 Wie viel Powershell Erfahrung hast du denn? Willst du Powershell lernen oder etwas vorgekaut bekommen? Weißt du wie du eine Schleife machst (z.B. gib mir alle Ordner in einem bestimmten Verzeichnis)? Zitieren Link zu diesem Kommentar
DerFranky 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 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)? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 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. Zitieren Link zu diesem Kommentar
DerFranky 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 > 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? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 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. } } Zitieren Link zu diesem Kommentar
DerFranky 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 Warum benutzt du $check und $check2? Was ist der Sinn? Wie setze ich "muss hier gespeichert werden (z.B. in ein extra Array) um es danach im 2. Teil weiterzubearbeiten." um? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 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? 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.