73234

Rekursives Auslesen einer Verzeichnisstruktur

Hallo @all,

heute habe ich mal ein Powershellproblem.
Ich möchte den Inhalt eines Laufwerkes auslesen, in Abhängigkeit der Struktur.
Mein erster Ansatz

[String] $folder = "G:\";
Get-ChildItem -Path $folder -recurse | SELECT Directory, Path, Name | Format-Table -AutoSize > "D:\Liste6.txt"

Ergenis:

A1
A2
A3
A11
A12
A13
A14
A21
A22
A23

Soweit so gut, ich könnte schon mit arbeiten, aber gewünscht wäre dieses Ergebnis

A1
A11
A12
A13
A14
A2
A21
A22
A23
A3

Hat jemand eine Idee?

Gruss Minion
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 358802

Url: https://administrator.de/forum/rekursives-auslesen-einer-verzeichnisstruktur-358802.html

Ausgedruckt am: 04.05.2025 um 12:05 Uhr

SlainteMhath
Lösung SlainteMhath 20.12.2017 um 16:51:35 Uhr
Goto Top
Moin,

Sort-Object?

lg,
Slainte
73234
73234 20.12.2017 um 21:25:21 Uhr
Goto Top
A1, A2, A3 Verzeichnisnamen oberster Ebene
A11, A12, A13 Verzeichnisnamen der Ebene darunter

Mit SORT bekomme ich das nicht hin.

BG Minion
SlainteMhath
SlainteMhath 21.12.2017 um 07:43:58 Uhr
Goto Top
Mit SORT bekomme ich das nicht hin.
Stimmt. Dann musst du deine Frage aber entsprechend formulieren face-smile

In etwa so müsste es funktionieren:
Schreib dir eine Funktion die einen Folder per gci ohne -recurse ausliest, und in die Textdatei ausgibt.Laufe dann die zurückgegeben Objects durch und rufe die Funktion rekursiv auf, falls das Object ein Ordner ist.

lg,
Slainte
colinardo
colinardo 21.12.2017, aktualisiert am 24.12.2017 um 09:51:09 Uhr
Goto Top
Servus zusammen,
für solche Fälle gibt es das CMDLet group-object mit dem sich sowas leicht erreichen lässt.
In dem Fall würde es ja genügen wenn man nach den Ordnern der ersten Ebene gruppiert welche man über Regex aus dem Fullname jeder(es) Datei/Ordners extrahiert:
$folder = 'D:\Projektordner'  
gci $folder -Recurse | group {[regex]::match($_.Fullname,([regex]::escape($folder) + '\\[^\\]+'))} | %{  
    "Objekte in Struktur unter '$($_.Name):'`n"  
    $_.Group.Fullname
}
Fast der selbe Code geht stattdessen alternativ sehr wohl auch direkt mit sort-object indem man das group-object einfach austauscht und das Augabeobjekt anpasst.
$folder = 'D:\Projektordner'  
gci $folder -Recurse | sort {[regex]::match($_.Fullname,([regex]::escape($folder) + '\\[^\\]+'))} | %{  
    $_.Fullname
}

Natürlich geht es auch wie @slainte sagt über den Umweg erst erste Ebene auslesen und dann mit einer Schleife über diese Ordner ein weiteres Get-Childitem mit Recurse.
$folder = 'D:\Projektordner'  
gci $folder  -Dir | %{
    gci $_.Fullname -Recurse | select Fullname
}
Also genügend Möglichkeiten, für jeden Gusto eine face-smile.

Viel Spaß und schon mal ein frohes und besinnliches Fest!
Grüße Uwe