none
Split Dateiname und in eine csv schreiben RRS feed

  • 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.

    Dienstag, 22. Dezember 2015 08:52

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


    Mittwoch, 23. Dezember 2015 09:24

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 

    Dienstag, 22. Dezember 2015 09:15
  • Guten Tag,

    vielen Dank für die Tipps. Funde ich ein Script Beispiel wo ich verwenden könnte oder anpassen könnte.

    Könnte mir da jemand weiterhelfen?

    Vielen Dank,

    Mittwoch, 23. Dezember 2015 08:10
  • 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


    Mittwoch, 23. Dezember 2015 09:24