Ordner löschen falls Datum älter als 3 Jahre
Moin,
ich habe eine Ordnerstruktur in der die Ordner im Namen das Erstellungsdatum haben.
Ich habe das folgende Skript bis jetzt:
Das soll eben die Ordner löschen bei denen das Datum im Dateinamen älter als 3 Jahre ist in dem er den String in ein DateTime umwandelt. (Ich weiß man kann es auch mit der CreationTime machen aber zum testen ist das besser mit Name).
Das Problem ist jetzt allerdings das er recht wahllos die Ordner löscht, er löscht einen Ordner der 2016 als Jahr hat, aber nicht den mit 2010 im Namen. Ich nehme mal schwer an das ich einen Fehler gemacht habe und nicht das System spinnt, kann mir da jemand auf die Sprünge helfen?
Grüße
ich habe eine Ordnerstruktur in der die Ordner im Namen das Erstellungsdatum haben.
Ich habe das folgende Skript bis jetzt:
$limit = (Get-Date).AddDays(-1095) #1095 Tage = 3 Jahre
Get-ChildItem -Path "C:\Users\XXX\Desktop\TestDelete" -Recurse -Directory | Foreach-Object{
if ([string]$_.Name -as [DateTime])
{
Write-Host "Contains Date"
if ($_.Name -lt $limit)
{
Remove-Item -Path $_.FullName -Force -Recurse
}else{Write-Host "Ist nicht alt genug zum loeschen"}
}
else { Write-Host "Doesnt contain Date" }
}
Das Problem ist jetzt allerdings das er recht wahllos die Ordner löscht, er löscht einen Ordner der 2016 als Jahr hat, aber nicht den mit 2010 im Namen. Ich nehme mal schwer an das ich einen Fehler gemacht habe und nicht das System spinnt, kann mir da jemand auf die Sprünge helfen?
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6626449744
Url: https://administrator.de/contentid/6626449744
Ausgedruckt am: 24.11.2024 um 00:11 Uhr
7 Kommentare
Neuester Kommentar
Hi,
kleiner Tipp:
es geht auch
kleiner Tipp:
$limit = (Get-Date).AddDays(-1095) #1095 Tage = 3 Jahre
$limit = (Get-Date).AddYears(-3)
Der Fehler ist, dass du einen String mit einem Datum vergleichst.
Versuchs mal mit
dann bitte auch einen separaten Post
if ($_.Name -lt $limit)
Versuchs mal mit
$limit = (Get-Date).AddYears(-3)
Get-ChildItem -Path "C:\Users\XXX\Desktop\TestDelete" -Recurse -Directory | Foreach-Object{
if ([string]$_.Name -as [DateTime])
{
Write-Host "Contains Date"
if ([string]$_.Name -as [DateTime] -lt $limit)
{
Remove-Item -Path $_.FullName -Force -Recurse
}else{Write-Host "Ist nicht alt genug zum loeschen"}
}
else { Write-Host "Doesnt contain Date" }
}
dann bitte auch einen separaten Post
Zitat von @DarkZoneSD:
Merci, habe voll verpennt das er den String garnicht parsed.
Die dd.MM.yyyy schreibweise ist in der de-DE hinterlegt oder wie genau hängt das zusammen?
beste Grüße
Merci, habe voll verpennt das er den String garnicht parsed.
$limit = (Get-Date).AddYears(-3)
if ([DateTime]::ParseExact($_.Name,"dd.MM.yyyy", [Globalization.CultureInfo]::CreateSpecificCulture('de-DE')) -lt $limit)
Die dd.MM.yyyy schreibweise ist in der de-DE hinterlegt oder wie genau hängt das zusammen?
beste Grüße
habs nochmal abgekürzt, du kannst den String auch so parsen wie du es oben schon gemacht hast.
Der FormatProvider, den ich angegeben hatte, wäre nicht nötig gewesen. Es geht auch mit:
[datetime]::ParseExact("01.12.2021","dd.MM.yyyy",$null)