Benutzer mit den meisten Antworten
Split Dateiname und in eine csv schreiben

Frage
-
Guten Tag,
dieser Script schreibt alle Ordner, Unterordner und die Dateinamnen in eine csv Datei. Funktioniert bestens. Ich benötige noch die Dateiname folgendermassen gesplittet in die CSV Datei zusätzlich:
Beispiel Dateiname: 1.2_3.4.PDF
Soll: ;A a;A1 x;A11 y;1.2;3.4;1.2_3.0.mmap
Ist: ;A a;A1 x;A11 y;1.2_3.0.mmap
Script:
$CurrentPath = Get-Location $Files = Get-ChildItem -Recurse -File $FileFullpath = $Files.FullName $CurrentPath = $CurrentPath -replace '\\', '\\' foreach ($File in $FileFullpath) { $Filepath = $File -replace "$CurrentPath", '' $Test = $Test + ($Filepath -replace '\\', ';') + "`n" } $Test >> Output.csv
Vielen Dank für eine unterstützung.
Antworten
-
Hallo,
mal als Beispiel:
$FileDetails = @() $Files = Get-ChildItem -Recurse -File ForEach ($Files in $Files) { $props = @{ BaseName = $File.BaseName Name = $File.Name DirectoryName = $File.DirectoryName } $FileObject = New-Object -TypeName PSObject -Property $props $FileDetails += $FileObject } $FileDetails | ConvertTo-Csv | Out-File Output.csv
Gruß Olaf
- Bearbeitet Olaf Reitz Mittwoch, 23. Dezember 2015 09:25
- Als Antwort vorgeschlagen Teodora MilushevaModerator Donnerstag, 24. Dezember 2015 11:21
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 3. Januar 2016 15:18
Alle Antworten
-
Hallo,
dein Skript mag funktionieren, aber nur gerade so. Folgende Verbesserungsvorschläge:
Lass das FileFullpath = $Files.FullName weg. Danach iterierst du über $Files, somit hast du in der $File-Variablen das vollständige Datei-Objekt und nicht nur den FullName, wie in deinem Skript.
Über $File.BaseName bekommst du den eigentlichen Dateinamen. Diesen kannst du mit dem -split Operator am Unterstrich teilen.
Ich würde auf keinen Fall dazu raten, die Ausgabe über einen String mit Zeilenumbrüchen zu realisieren. Leg hier ein Array @() an, zu dem du die einzelnen Ausgabeobjekte hinzufügst.
Als Ausgabe verwendet man üblicherweise Out-File oder Set-Content, nicht ">>".
Viele Grüße
Christoph
-
Hallo,
mal als Beispiel:
$FileDetails = @() $Files = Get-ChildItem -Recurse -File ForEach ($Files in $Files) { $props = @{ BaseName = $File.BaseName Name = $File.Name DirectoryName = $File.DirectoryName } $FileObject = New-Object -TypeName PSObject -Property $props $FileDetails += $FileObject } $FileDetails | ConvertTo-Csv | Out-File Output.csv
Gruß Olaf
- Bearbeitet Olaf Reitz Mittwoch, 23. Dezember 2015 09:25
- Als Antwort vorgeschlagen Teodora MilushevaModerator Donnerstag, 24. Dezember 2015 11:21
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 3. Januar 2016 15:18