73234
Goto Top

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

Content-Key: 358802

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Dec 20, 2017 at 15:51:35 (UTC)
Goto Top
Moin,

Sort-Object?

lg,
Slainte
Mitglied: 73234
73234 Dec 20, 2017 at 20:25:21 (UTC)
Goto Top
A1, A2, A3 Verzeichnisnamen oberster Ebene
A11, A12, A13 Verzeichnisnamen der Ebene darunter

Mit SORT bekomme ich das nicht hin.

BG Minion
Member: SlainteMhath
SlainteMhath Dec 21, 2017 at 06:43:58 (UTC)
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
Member: colinardo
colinardo Dec 21, 2017, updated at Dec 24, 2017 at 08:51:09 (UTC)
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