blackmann
Goto Top

Dateistruktur mit Powershell auswerten

N'Abend @all,

ich möchte mich mal auf ein neues Gebiet begeben, die Powershell.
Und ich will folgendes Problem unbedingt mit der PS lösen....

Ich will eine bestehende Verzeichnisstruktur in eine TXT-Datei einlesen und diese dann in ACCESS importieren.
Die Struktur sieht wie folgt aus:

"Verzeichnis"/"Unterverzeichnisbezeichnung"/"Dateiname.txt"
...
DatenName
|--- Datenname - Detail
|---Detail - Unterdetail01.txt
|---Detail - Unterdetail02.txt
|---Detail - Unterdetail03.txt
...
DatenName/Datename - Detail/Detail - Unterdetail01.txt
DatenName/Datename - Detail/Detail - Unterdetail02.txt
DatenName/Datename - Detail/Detail - Unterdetail03.txt
Der Bindestrich ist wirklich in den Verzeichnis- und Dateinamen enthalten.
Eine Textdatei die mir zum einlesen helfen würde, könnte inhaltlich so aussehen:

Datenname - Detail - Unterdetail01.txt
Datenname - Detail - Unterdetail02.txt
Datenname - Detail - Unterdetail03.txt

Ich selber habe erste Erfolge mit

Get-ChildItem -Path D:\Datenpfad -File -Recurse -Include *.txt >> D:\Alles.txt
sieht wie folgt aus:
Verzeichnis: F:\Datenpfad\Datenname\Datenname - Detail

Mode LastWriteTime Length Name
------------- ------ ----
-a---- 30.09.2017 21:25 15568744 01 - Detail - Unterdetail01.txt
-a---- 30.09.2017 21:25 10404026 02 - Detail - Unterdetail02.txt

Mit dieser TXT-Datei(struktur) tue ich mich mit dem Datenimport in ACCESS schwer,
es sollen dort genaue Master/Detailbeziehungen aufgebaut werden...

Was mir nicht gelingen will ist folgendes: Während der Ausführung des Scriptes die Inhalte
des Verzeichnis- und des Dateinamens in seine Bestandteile zu zerlegen
und sie dann neu wie gewünscht zusammenzustellen.

OK - erst mal genug für heute Abend.
Ich hoffe es ist verständlich.

Danke für Eure Hilfe

BM

Content-ID: 6799569217

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

Ausgedruckt am: 21.11.2024 um 15:11 Uhr

6247018886
Lösung 6247018886 17.04.2023 aktualisiert um 07:55:03 Uhr
Goto Top
Get-ChildItem d:\Datenpfad -File -Recurse -Filter *.txt | %{"$($_.Directory.Name) -$(($_.Name -split "-")[-1])"} | set-content d:\alles.txt  
online demo
Ne CSV wäre auch denkbar ...
Get-ChildItem -Path D:\Datenpfad -File -Recurse -Filter *.txt | select @{n='Root';e={$_.Directory.Parent.Name}},@{n='DirectoryName';e={$_.Directory.Name}},Name | export-csv d:\alles.csv -Delimiter ";" -NoType -Encoding UTF8  
Whatever you wish ...

Cheers briggs
Blackmann
Blackmann 17.04.2023 um 09:29:19 Uhr
Goto Top
Moin @6247018886,

vielen Dank, ein Highlight zum Montag ... wo gibt's das noch?

Variante 1 läuft!

Nun muss ich nur noch folgendes verstehen lernen:

| %{"$($_.Directory.Name) -$(($_.Name -split "-")[-1])"} |

BG BM
6247018886
Lösung 6247018886 17.04.2023 aktualisiert um 10:08:04 Uhr
Goto Top
%{} = Abkürzung für Foreach-Object
$_.Directory.Name = Name des Ordners in dem die Datei enthalten ist
($_.Name -split "-")[-1] = Splitet den Dateinamen anhand des Bindestrichs und aus dem Zurückgegebenen Array nimmt es den letzten Index, also bspw. das " Unterdetail01.txt".
Die $() innerhalb des Strings führen die darin enthaltenen Befehle aus.
Das ganze als String mit " -" verkettet, und via Pipe (|) an Set-Content übergeben welches alles in eine Datei schreibt, feddisch.
Blackmann
Blackmann 18.04.2023 um 08:58:24 Uhr
Goto Top
Moin @6247018886,

vielen Dank für die ausführhliche Info/Hilfe.

BG BM