
73234
20.12.2017
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 358802
Url: https://administrator.de/forum/rekursives-auslesen-einer-verzeichnisstruktur-358802.html
Ausgedruckt am: 04.05.2025 um 12:05 Uhr
4 Kommentare
Neuester Kommentar
Mit SORT bekomme ich das nicht hin.
Stimmt. Dann musst du deine Frage aber entsprechend formulieren 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
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:
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.
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.
Also genügend Möglichkeiten, für jeden Gusto eine
.
Viel Spaß und schon mal ein frohes und besinnliches Fest!
Grüße Uwe
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
}
$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
}
Viel Spaß und schon mal ein frohes und besinnliches Fest!
Grüße Uwe