Powershell: Ältesten Ordner in Ordnerstruktur finden
Hallo zusammen
Ich benötige die Information in einem Ordnerkonstrukt den Ordner mit dem ältesten Datum zu finden. Dabei will ich aber nicht auf die Attribute der Ordner zugreifen sondern mache das von den Ordnernamen abhängig.
Meine Ordnerstruktur schaut so aus:
Ja nicht wirklich schön aber mit Idee dahinter.
- Der lange Name (GUID) ist ein Identifizierer für den Ordner
- nächste Ebene ist das Jahr
- nächste Ebene ist der Monat
- nächste Ebene ist der Tag
- Darunter liegen dann Dateien
Ich möchte nicht die Ordnerattribute oder gar Dateien auslesen da das mitunter extrem viele sein könnten. Somit würde die Laufzeit vom Script massiv vergrößert.
Ich hatte gedacht dass ich die Ordner durchlaufe und dann vergleiche. Aber das wird ja ein riesieges Konstrukt. Begonnen hatte ich so:
Geht das nicht einfacher?
Ist die foreach-Schleife hier überhaupt eine gute Wahl?
Bin auf Eure Ideen gespannt.
Freundliche Grüsse
Jathagrimon
Ich benötige die Information in einem Ordnerkonstrukt den Ordner mit dem ältesten Datum zu finden. Dabei will ich aber nicht auf die Attribute der Ordner zugreifen sondern mache das von den Ordnernamen abhängig.
Meine Ordnerstruktur schaut so aus:
- Hauptverzeichnis
- * Files
- * * 3f59b520-b8a1-ea11-9fc0-86e2e3944360
- * * * kein Unterordner vorhanden
- * * 4fb2dd01-24b2-ea11-9fc2-b36933dabe78
- * * * 2020
- * * * * 06
- * * * * * 19
- * * 0223de1e-6794-ea11-9fbb-b0eaa5a5580c
- * * * 2020
- * * * * 06
- * * * * * 19
- * * * * 07
- * * * * * 04
- * * * 2021
- * * * * 01
- * * * * 02
- * * * * 03
- * * * * 11
- * * * 2022
- * * * * 01
- * * * * 02
- * * 9956b520-b8a1-ea11-9fc0-86e2e3944360
Ja nicht wirklich schön aber mit Idee dahinter.
- Der lange Name (GUID) ist ein Identifizierer für den Ordner
- nächste Ebene ist das Jahr
- nächste Ebene ist der Monat
- nächste Ebene ist der Tag
- Darunter liegen dann Dateien
Ich möchte nicht die Ordnerattribute oder gar Dateien auslesen da das mitunter extrem viele sein könnten. Somit würde die Laufzeit vom Script massiv vergrößert.
Ich hatte gedacht dass ich die Ordner durchlaufe und dann vergleiche. Aber das wird ja ein riesieges Konstrukt. Begonnen hatte ich so:
$basicPath = "./Hauptverzeichnis"
$Folders = Get-ChildItem -Path $basicPath -Directory
foreach($Folder in $Folders)
{
$tempPath = [IO.Path]::Combine($basicPath,$Folder.Name)
$jahr = Get-ChildItem -Path $tempPath -Directory | select Name | sort Name
# Somit hätte ich in $jahr das kleinste Jahr des ersten Ordners aus der foreach Schleife
# Aber nun muss ich mir die Werte merken und vergleichen und bei Bedarf austauschen und dann weiter vergleichen u.s.w.
# Zudem muss ich das dann mit den weiteren Ebenen genauso machen wenn zb das Jahr 2020 in jeder GUID vorkommt
# Und dann wenn die Monate auch mehrfach vorkommen muss ich alle Tage vergleichen... Puh
}
Geht das nicht einfacher?
Ist die foreach-Schleife hier überhaupt eine gute Wahl?
Bin auf Eure Ideen gespannt.
Freundliche Grüsse
Jathagrimon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2195143115
Url: https://administrator.de/contentid/2195143115
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
$basicPath = ".\Hauptverzeichnis"
$oldest = Get-ChildItem -Path $basicPath -Directory -recurse | ?{$_.Fullname -match '\d{4}\\\d{2}\\\d{2}$'} | sort-object {get-date ($_.Fullname -replace '.*(\d{4})\\(\d{2})\\(\d{2})$','$1-$2-$3')} | select -First 1
$oldest.Fullname
Teste nochmal, habe etwas korrigiert.