zzaaiiggaa
Goto Top

Powershell - ordner files

Hallo zusammen,

gibts eine leichte Methode um in einem Folder (mit Unterordnern) alle Files der Unterodner auszulesen und diese in eine CSV zu schreiben?
Also sowas wie:

Ordner 1
- Unterodner 1 - File 1, File 2
- Unterodner 2 - File 3

CSV
Unterodner 1 - File 1, File 2
Unterodner 2 - File 3


Gruß,

PS. Komme irgendwie nicht selbst drauf wie man das vor allem schnell lösen kann!


Danke!!!

Content-Key: 466636

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

Printed on: April 24, 2024 at 21:04 o'clock

Member: erikro
erikro Jun 28, 2019 at 13:45:03 (UTC)
Goto Top
Moin,

Zitat von @ZZaaiiggaa:
gibts eine leichte Methode um in einem Folder (mit Unterordnern) alle Files der Unterodner auszulesen und diese in eine CSV zu schreiben?
Also sowas wie:

Ordner 1
- Unterodner 1 - File 1, File 2
- Unterodner 2 - File 3

CSV
Unterodner 1 - File 1, File 2
Unterodner 2 - File 3

Das ist aber kein CSV. Ansonsten ganz einfach:

gci -recurse -file | export-csv test.csv -delimiter ";" -encoding utf8 -NoTypeInformation  

Du kannst natürlich beim get-childitem auch noch einen Startpfad angeben.

hth

Erik
Member: colinardo
Solution colinardo Jun 28, 2019 updated at 14:24:30 (UTC)
Goto Top
Servus, ZZaaiiggaa,
da gibt's wie immer mehrere Möglichkeiten der Formatierung...

Hier mal zwei Beispiele

Such dir was aus:

Pro Datei, jeweils der Pfad und die Datei, (normalerweise die übersichtlichere Variante und besser Handlebar in Excel & Datenbank & Co)
$ordner = 'D:\Daten'  
$export = 'D:\export.csv'  
gci $ordner -File -Recurse | select Directory,Name | export-csv $export -Delimiter ";" -NoType -Encoding UTF8  
Pro Pfad jeweils einmal der Pfad in eigener Spalte und die Dateien mit Komma getrennt in der Spalte "Files"
$ordner = 'D:\Daten'  
$export = 'D:\export.csv'  
gci $ordner -File -Recurse | group Directory | select Name,@{n='Files';e={$_.Group.Name -join ","}} | export-csv $export -Delimiter ";" -NoType -Encoding UTF8  
usw.

Grüße Uwe
Member: ZZaaiiggaa
ZZaaiiggaa Jun 28, 2019 updated at 15:20:17 (UTC)
Goto Top
Vielen Dank Uwe!!!

mhm face-sad ich will eigentlich nicht jedes mal nachfragen müssen, aber powershell hat soviele Möglichkeiten Sachen einfach zu progn.!
Member: colinardo
Solution colinardo Jun 28, 2019 updated at 15:26:07 (UTC)
Goto Top
Zitat von @ZZaaiiggaa:

Vielen Dank Uwe!!!

mhm face-sad ich will eigentlich nicht jedes mal nachfragen müssen, aber powershell hat soviele Möglichkeiten Sachen einfach zu progn.!
Dagegen hilft nur ausgiebig Lesen, Üben und nicht vorschnell aufgeben sondern den Ehrgeiz trainieren face-smile


Du musst ja nicht alles auf einmal wissen, nur die Möglichkeiten zu kennen befähigt einen dann darauf aufzubauen.
Member: ZZaaiiggaa
ZZaaiiggaa Jun 28, 2019 updated at 15:40:50 (UTC)
Goto Top
face-smile Ja! Das stimmt!

Beispiel, ich wollte gerade nur die "Überordner" ausgeben von der Directory wo die Files liegen, also sowas wie:
C:\upfolder1\folder1\file1

Nur "folder1" in die CSV schreiben.

Ich habs umständlich mit regex gemacht, bin mir aber sicher das es da wieder einen einzeiler gibt.
Hab mir die gci angesehen und dort gibts ja nur die Directory und weiter wüsste ich nicht wo ich suchen sollte.


Gruß
Member: colinardo
colinardo Jun 28, 2019 updated at 18:22:40 (UTC)
Goto Top
Ist leider nicht ganz eindeutig geschrieben

Wenn's nur die reinen Namen und nicht der gesamte Pfad sein soll
gci $ordner -Directory -Recurse | select Name
Oder vom Ordner der absolute Pfad
gci $ordner -Directory -Recurse | select Fullname
Oder wenn du weiterhin die Dateien auslesen willst und dazu den Basename des Ordners mit ausgeben willst
gci $ordner -File -Recurse | select @{n='Ordner-Basename';e={$_.Directory.Name}}, Name  
usw.
Lass dir einfach auf der Konsole mit einem in die Pipe gehängten Format-List * die verfügbaren Eigenschaften der Objekte anzeigen, dann musst du nicht jeden Furz erfragen.
Member: ZZaaiiggaa
ZZaaiiggaa Jun 28, 2019 at 18:19:22 (UTC)
Goto Top
Vielen Dank, aber beim besten willen ich kriegs nicht hin

CSV
Soll nur den "überordner" haben, also "C:\upfolder1\folder1\file1"
Also

Folder 1 File1


Keine Ahnung wie man an Folder 1 ohne vorhergehender Dir kommen soll
Member: colinardo
Solution colinardo Jun 28, 2019 updated at 18:34:47 (UTC)
Goto Top
S. letztes hinzugefügtes Beispiel oben.
gci $ordner -File -Recurse | select @{n='Ordner-Basename';e={$_.Directory.Name}}, Name  
Über die Property Directory welche den Ordner als Objekt repräsentiert und dessen Property Name bekommst du es ;). Falls du dich fragst was das für einKonstrukt ist, das ist eine sogenannte Calculated Property mit der man leicht eigene Eigenschaften in der Pipeline erstellen kann.
Und ich kann dir nur empfehlen, schau dir die Objekte und Eigenschaften der FileObjekte in der Konsole an. Dann erledigt sich vieles von selbst.
Member: ZZaaiiggaa
ZZaaiiggaa Jun 28, 2019 updated at 18:44:51 (UTC)
Goto Top
Sorry für die blöde Frage aber wie genau schaue ich mir die ganzen Eigenschaften der Objekte in der Konsole an?

"Lass dir einfach auf der Konsole mit einem in die Pipe gehängten Format-List * die verfügbaren Eigenschaften der Objekte anzeigen, dann musst du nicht jeden Furz erfragen."

Mache Powershell face-smile seit dem ersten Beitrag hier vor paar Tagen sry für die Frage face-sad
Member: colinardo
Solution colinardo Jun 28, 2019 updated at 19:00:34 (UTC)
Goto Top
Zum Anzeigen aller Eigenschaften der ersten Datei(reicht ja um zu erfahren welche Eigenschaften es so gibt)
gci $ordner -File -Recurse | select -First 1 |  format-list *
Um zu sehen welche Member, also Eigenschaften und Methoden das Objekt hat benutzt du stattdessen Get-Member
gci $ordner -File -Recurse | select -First 1 |  Get-Member *
Ich hatte dir ja guten Lesestoff oben verlinkt, in diesem Fall lies dir folgenden für Anfänger essentiell wichtigen Abschnitt durch:
http://www.powershellpraxis.de/index.php/die-drei-wichtigsten-cmdlets
http://www.powershellpraxis.de/index.php/formatierung-der-ausgabe