2017-11-30 2 views
-1

Ich habe eine Ordnerstruktur mit zum Beispiel 100 Ordnern. Jeder Ordner enthält 200 Dateien.Powershell Dateien löschen, aber letzte x Version beibehalten

Ich möchte (über geplante Aufgabe) alle Dateien in jedem Ordner löschen, aber die letzten 10 Versionen davon behalten.

Ich versuche, in Powershell zu verbessern, so vermute ich, dass dies ziemlich einfach sein sollte. Ich habe dieses Skript erstellt,

#Delete all files, keep last 10 versions# 

$Directory = "D:\Octopus\Packages" 
$Keep = "10" 

Get-ChildItem $Directory| ?{ $_.PSIsContainer } | Select-Object FullName | Export-Csv $Directory\FolderList.csv 

$FolderList = import-csv $Directory\FolderList.csv 

ForEach ($row in $FolderList) 
{ 
Get-ChildItem -Recurse | where{-not $_.PsIsContainer}| sort CreationTime -desc | select -Skip $Keep | Remove-Item -Force 
} 

Es scheint durch jeden Ordner werden Looping, aber die letzten 10 Dateien für die gesamte Ordnerstruktur zu halten, nicht pro Ordner. Einige Ordner haben also 0 Dateien, manche 2 Dateien, manche 8 Dateien.

Alle Zeiger würden geschätzt werden

Vielen Dank!

+2

Was meinst du mit "die letzten 10 Versionen davon behalten"? von was? – TheIncorrigible1

+0

Sie geben nicht wirklich den Pfad in Ihrem 'get-childitem' an. Sie werden das in etwas wie 'Get-ChildItem $ row -recurse' ändern wollen. – Nick

Antwort

0

Wenn Sie tatsächlich diese CSV benötigen, dann ändern Sie einfach Get-ChildItem -Recurse zu Get-ChildItem $row -recurse. Wenn Sie die CSV-Datei jedoch nicht erstellen müssen, können Sie diese entfernen und die Ergebnisse Ihrer ersten Get-ChildItem in die nächste Aktion leiten.

$Directory = "D:\Octopus\Packages" 
$Keep = "10" 

Get-ChildItem $Directory| ?{ $_.PSIsContainer } | Select-Object FullName | 
ForEach-object {Get-ChildItem $_.fullname -Recurse | 
where{-not $_.PsIsContainer}| sort CreationTime -desc | 
select -Skip $Keep | Remove-Item -Force } 
+0

Erstaunlich, danke, das funktioniert gut. Die csv war eine Kombination aus dem Versuch, es zum Laufen zu bringen, aber auch meine Powershell-Beine als Teil meines Lernens zu dehnen. Wäre natürlich nicht effizient gewesen. Danke für die Hilfe ! –

+0

Awesome Ich bin froh, dass ich helfen konnte. Wenn dies für Sie funktioniert, markieren Sie es bitte als Antwort. :) – Nick

Verwandte Themen