jathagrimon
Goto Top

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:

  • 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

Content-ID: 2195143115

Url: https://administrator.de/contentid/2195143115

Ausgedruckt am: 24.11.2024 um 15:11 Uhr

1915348599
Lösung 1915348599 17.03.2022 aktualisiert um 07:29:40 Uhr
Goto Top
$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
Jathagrimon
Jathagrimon 17.03.2022 um 11:37:47 Uhr
Goto Top
Danke für die Hilfe. Leider trifft das nicht den richtigen Datensatz.
Es sollte eigentlich dieser Wert gefunden werden:

4fb2dd01-24b2-ea11-9fc2-b36933dabe78\2020\06\19

Es wird aber dieser gefunden:

0223de1e-6794-ea11-9fbb-b0eaa5a5580c\2020\06\22

Muss ich das Statement noch in einer Schleife einbinden?
1915348599
1915348599 17.03.2022 aktualisiert um 12:00:56 Uhr
Goto Top
Teste nochmal, habe etwas korrigiert.
Jathagrimon
Jathagrimon 17.03.2022 um 12:47:11 Uhr
Goto Top
Vielen vielen Dank das passt jetzt prima. (Da wär ich nie drauf gekommen)