PS wenn mehr als x dateien im ordner sind, diese löschen (über mehrere UNC Pfade)
Hallo
Ich möchte das in den (unter)Ordnern nur eine bestimmte Anzahl an Dateien liegen.
Also z.b 1000, wenn dann am nächsten Tag 1234 Dateien darin enthalten sind, soll er 234 Dateien löschen.
Jetzt habe ich das schon für ein Verzeichnis geschafft.
Das schaut auch aktuell auch gut aus.
Wenn ich jetzt aber mehrere Pfade benötige, brauche ich eine foreach, soweit hab ich das schon verstanden, nur nicht wo ich die jetzt einfügen sollte.
ich weiß das ich so
mehrere Pfade definieren kann und mit
alle abarbeiten kann. Zumindest interpretiere ich das so.
Kann mir da jemand dabei behilflich sein?
Danke schon mal an alle
Ich möchte das in den (unter)Ordnern nur eine bestimmte Anzahl an Dateien liegen.
Also z.b 1000, wenn dann am nächsten Tag 1234 Dateien darin enthalten sind, soll er 234 Dateien löschen.
Jetzt habe ich das schon für ein Verzeichnis geschafft.
$sourceFolder = "c:\tmp"
$keepCountPerFolder = 10
function Remove-ExcessFiles {
param (
[string]$folder
)
# Zählen der Dateien im aktuellen Verzeichnis
$fileCount = (Get-ChildItem $folder -File).Count
# Überprüfen, ob die Anzahl der Dateien größer als $keepCountPerFolder ist
if ($fileCount -gt $keepCountPerFolder) {
# Die überzähligen Dateien ermitteln
$filesToDelete = Get-ChildItem $folder | Select-Object -First ($fileCount - $keepCountPerFolder)
# Löschen der überzähligen Dateien
foreach ($file in $filesToDelete) {
Write-Host Remove-Item $file.FullName -Force
}
Write-Host "Löschen abgeschlossen für Verzeichnis: $folder"
} else {
Write-Host "Es gibt weniger als $keepCountPerFolder Dateien im Verzeichnis $folder. Kein Löschen erforderlich."
}
}
# Überprüfen, ob das Quellverzeichnis existiert
if (Test-Path $sourceFolder -PathType Container) {
# Rekursiv durch alle Unterverzeichnisse gehen und überschüssige Dateien entfernen
Get-ChildItem $sourceFolder -Directory -Recurse | ForEach-Object {
Remove-ExcessFiles -folder $_.FullName
}
} else {
Write-Host "Das angegebene Quellverzeichnis existiert nicht."
}
Das schaut auch aktuell auch gut aus.
Wenn ich jetzt aber mehrere Pfade benötige, brauche ich eine foreach, soweit hab ich das schon verstanden, nur nicht wo ich die jetzt einfügen sollte.
ich weiß das ich so
$sourceFolder = "c:\tmp", "C:\temp"
foreach ($sourceFolder in $sourceFolders ) {
alle abarbeiten kann. Zumindest interpretiere ich das so.
Kann mir da jemand dabei behilflich sein?
Danke schon mal an alle
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4115469272
Url: https://administrator.de/contentid/4115469272
Ausgedruckt am: 17.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Kein Problem
Gruß Katrin
$keep = 10
$folders = "c:\tmp","C:\temp"
foreach($folder in $folders | ?{Test-Path -LiteralPath $_}){
Get-ChildItem -LiteralPath $folder -Directory -Recurse | %{
Get-ChildItem -LiteralPath $_.Fullname -File | sort LastWriteTime -Descending | select -skip $keep | remove-item -Force -Verbose
}
}
Gruß Katrin
Zitat von @sugram:
Also erst mal danke
Wenn ich diese Powershell ausführe, und in dem Ordner z.b 100 Files enthalten sind und ich bei keep 99 eingebe, bleibt die Anzahl bei 100.
Nein bei 99 natürlich 🤪.Also erst mal danke
Wenn ich diese Powershell ausführe, und in dem Ordner z.b 100 Files enthalten sind und ich bei keep 99 eingebe, bleibt die Anzahl bei 100.
Und dennoch würde mich das interessieren, wo ich bei meinem Script das foreach einbauen müßte.
Einfach mit einer ForEach Schleife wie oben gezeigt Kapseln ....$folders = "c:\tmp", "c:\temp"
$keepCountPerFolder = 10
function Remove-ExcessFiles {
param (
[string]$folder
)
# Zählen der Dateien im aktuellen Verzeichnis
$fileCount = (Get-ChildItem $folder -File).Count
# Überprüfen, ob die Anzahl der Dateien größer als $keepCountPerFolder ist
if ($fileCount -gt $keepCountPerFolder) {
# Die überzähligen Dateien ermitteln
$filesToDelete = Get-ChildItem $folder | Select-Object -First ($fileCount - $keepCountPerFolder)
# Löschen der überzähligen Dateien
foreach ($file in $filesToDelete) {
Write-Host Remove-Item $file.FullName -Force
}
Write-Host "Löschen abgeschlossen für Verzeichnis: $folder"
} else {
Write-Host "Es gibt weniger als $keepCountPerFolder Dateien im Verzeichnis $folder. Kein Löschen erforderlich."
}
}
Foreach ($sourceFolder in $folders){
# Überprüfen, ob das Quellverzeichnis existiert
if (Test-Path $sourceFolder -PathType Container) {
# Rekursiv durch alle Unterverzeichnisse gehen und überschüssige Dateien entfernen
Get-ChildItem $sourceFolder -Directory -Recurse | ForEach-Object {
Remove-ExcessFiles -folder $_.FullName
}
} else {
Write-Host "Das angegebene Quellverzeichnis existiert nicht."
}
}