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-ID: 466636

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

Ausgedruckt am: 24.11.2024 um 10:11 Uhr

erikro
erikro 28.06.2019 um 15:45:03 Uhr
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
colinardo
Lösung colinardo 28.06.2019 aktualisiert um 16:24:30 Uhr
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
ZZaaiiggaa
ZZaaiiggaa 28.06.2019 aktualisiert um 17:20:17 Uhr
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.!
colinardo
Lösung colinardo 28.06.2019 aktualisiert um 17:26:07 Uhr
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.
ZZaaiiggaa
ZZaaiiggaa 28.06.2019 aktualisiert um 17:40:50 Uhr
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ß
colinardo
colinardo 28.06.2019 aktualisiert um 20:22:40 Uhr
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.
ZZaaiiggaa
ZZaaiiggaa 28.06.2019 um 20:19:22 Uhr
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
colinardo
Lösung colinardo 28.06.2019 aktualisiert um 20:34:47 Uhr
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.
ZZaaiiggaa
ZZaaiiggaa 28.06.2019 aktualisiert um 20:44:51 Uhr
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
colinardo
Lösung colinardo 28.06.2019 aktualisiert um 21:00:34 Uhr
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