none
PowerShell Dateinamen eines Ordners in ein Array RRS feed

  • Frage

  • Hallo,

    leider habe ich hierzu nichts gefunden. Vielleicht ist es ja auch gar nicht möglich, aber ich würde gerne alle Dateien innerhalb eines Ordners auslesen, die Dateinamen extrahieren, dort eine Nummer (Syntax der Dateien ist immer gleich) z.b. via regex extrahieren dies in ein array packen, dann zu jeder Nummer die Datenbank fragen und wenn die Nummer vorhanden ist, diese Datei verschieben. Leider bekomme ich den Ansatz nicht einmal hin. Wie kann ich die Dateinamen alle Dateien aus einem Ordner auslesen?

    Dankeschön.

    Mittwoch, 14. Oktober 2015 08:58

Antworten

  • Servus,

    so geht es sogar noch fixer /angenehmer.

    #als Objekt
    Get-ChildItem c:\temp -Directory -Recurse
    Get-ChildItem c:\temp -File -Recurse
    
    #oder direkt den Namen
    (Get-ChildItem c:\temp -Directory -Recurse).Name
    (Get-ChildItem c:\temp -Files -Recurse).Name
    

    damit hast du schon mal eine Liste der Daten.

    Dann musst du uns nur noch sagen, wie die Dateien aussehen und was du filtern willst. Regex z.B. so möglich:

    $matches = [regex]::Matches($content,'$REGEXVALUE')
    
    

    Zusammengebaut dann vielleicht so:

    $directories=(Get-ChildItem c:\temp -Directory -Recurse).Name
    
    foreach ($item in $directories)
    {
        $matches = [regex]::Matches($content,'^')
        if ($matches)
        {
            #mache etwas
        }
    }


    Datenbankabfrage wird etwas komplexer - MSSQL? 

    Da gibt es vorgefertigte Funktionen, die du nutzen könntest.

    Verschieben geht dann mit 

    Move-Item


    Sinnvoll ist es auch immer die Hilfe anzuschauen - z.B.

    Get-Help Move-Item -verbose

    Versuch erstmal die ersten Steps - offenbar fehlt dir auch noch Grundwissen und das können wir dir nicht ersetzen.

    Grüße


    Greetings,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - München

    Blog    

    Caution: This post may contain errors.

    Mittwoch, 14. Oktober 2015 17:05

Alle Antworten

  • Hallo,

    eigentlich ist das alles ganz einfach und genau, wofür PowerShell gemacht wurde :-)

    Angenommen, es geht um den Ordner C:\Temp. Damit bekommst du alle Dateien, Ordner werden gleich herausgefiltert.

    $Dateien = Get-Childitem "C:\Temp" -recurse | where{-not $_.PSIsContainer}

    Die Dateinamen als Array bekommst du über 

    $Dateinamen = $Dateien | select -ExpandProperty Basename
    Vielleicht hilft dir das als Ansatz?

    Mittwoch, 14. Oktober 2015 09:09
  • Servus,

    so geht es sogar noch fixer /angenehmer.

    #als Objekt
    Get-ChildItem c:\temp -Directory -Recurse
    Get-ChildItem c:\temp -File -Recurse
    
    #oder direkt den Namen
    (Get-ChildItem c:\temp -Directory -Recurse).Name
    (Get-ChildItem c:\temp -Files -Recurse).Name
    

    damit hast du schon mal eine Liste der Daten.

    Dann musst du uns nur noch sagen, wie die Dateien aussehen und was du filtern willst. Regex z.B. so möglich:

    $matches = [regex]::Matches($content,'$REGEXVALUE')
    
    

    Zusammengebaut dann vielleicht so:

    $directories=(Get-ChildItem c:\temp -Directory -Recurse).Name
    
    foreach ($item in $directories)
    {
        $matches = [regex]::Matches($content,'^')
        if ($matches)
        {
            #mache etwas
        }
    }


    Datenbankabfrage wird etwas komplexer - MSSQL? 

    Da gibt es vorgefertigte Funktionen, die du nutzen könntest.

    Verschieben geht dann mit 

    Move-Item


    Sinnvoll ist es auch immer die Hilfe anzuschauen - z.B.

    Get-Help Move-Item -verbose

    Versuch erstmal die ersten Steps - offenbar fehlt dir auch noch Grundwissen und das können wir dir nicht ersetzen.

    Grüße


    Greetings,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - München

    Blog    

    Caution: This post may contain errors.

    Mittwoch, 14. Oktober 2015 17:05