none
PowerShell Kopieren von Arrays RRS feed

  • Frage

  • Hallo,

    erst mal danke für eure Zeit :)

    Es geht um folgendes.Ich habe ein Fotoarchiv wenn man es so nennen kann und von diesem will ich die Bilder sortiert nach Monaten auf einen anderen Pfad legen. Sprich pro Monat ein Ordner. Beschäftig mich jetzt seit 2Std hiermit und das ist mein erster Versuch mit PowerShell.

    Der Versuch sieht wie Folgt aus:

    for ($i=1; $i -le 12; $i++)

    {                   

    $to = "C:\TEMP\test\test".$i

    $dateien = gci -recurse | where-Object { $_.CreationTime.Month -eq $i }

           

            for ($x=0; $x -le $dateien.Count; $x++)

            {

                

             copy-item $dateien[$x]  -destination $to

           

            }

    }

    Die Fehlermeldung ist: Es ist nicht möglich, ein Index auf ein NULL-Array anzuwenden...

    Ich habe mir aber das Array mal per echo ausgeben lassen und da stand alles drin.

     

    Danke


    • Bearbeitet conand Freitag, 9. September 2016 08:44
    Freitag, 9. September 2016 08:42

Antworten

  • Hallo,

    dann fangen wir mal vorne an:

    $to = "C:\TEMP\test\test".$i

    Hiermit willst Du deinen Zielpfad bauen, das funktioniert aber nicht, die Vraibel $to ist danach nicht befüllt. Es ist immer eine gute Idee sich in so einem Fall die Variablen auszugeben, dann erkennt man solche Fehler recht schnell.

    Das muesste dann z.B. so aussehen:

    $to = "C:\TEMP\test\test.$i"

    Und um deien Code zu vereinfachen solltest Du dich mal damit beschäftigen:
    Get-Help about_Foreach

    Beste Gruesse
    brima


    • Bearbeitet brima Freitag, 9. September 2016 08:53
    • Als Antwort markiert conand Freitag, 9. September 2016 10:51
    Freitag, 9. September 2016 08:51
  • Hi,

    so habe Dir mal hier ein auf die schnelle noch ein kleines einfaches Beispiel gebaut auf dem du aufbauen kannst, also Dateien an Hand des Monates zu kopieren.

    # Ziel-SubFolder anlegen [einmalig] 1..12 | ForEach-Object { New-Item -Type Directory E:\Test\$_ }
    # Auf Quelle positionieren
    Set-Location C:\Daten # von da recursive alle Dateien mit der Endung .txt in die Zielverzeichnisse kopieren Get-ChildItem -recurse -Filter *.txt | Foreach-Object { Copy-Item -Path $_.FullName -Destination "E:\Test\$($_.CreationTime.Month)" }


    Damit kannst Du ja mal arbeiten, ich denke aber nur nach Monat zu gliedern ist nicht glücklich, besser pro Jahr je 12 Verzeichnisse oder so ...


    • Bearbeitet brima Freitag, 9. September 2016 09:44
    • Als Antwort markiert conand Freitag, 9. September 2016 10:51
    Freitag, 9. September 2016 09:42

Alle Antworten

  • Hallo,

    dann fangen wir mal vorne an:

    $to = "C:\TEMP\test\test".$i

    Hiermit willst Du deinen Zielpfad bauen, das funktioniert aber nicht, die Vraibel $to ist danach nicht befüllt. Es ist immer eine gute Idee sich in so einem Fall die Variablen auszugeben, dann erkennt man solche Fehler recht schnell.

    Das muesste dann z.B. so aussehen:

    $to = "C:\TEMP\test\test.$i"

    Und um deien Code zu vereinfachen solltest Du dich mal damit beschäftigen:
    Get-Help about_Foreach

    Beste Gruesse
    brima


    • Bearbeitet brima Freitag, 9. September 2016 08:53
    • Als Antwort markiert conand Freitag, 9. September 2016 10:51
    Freitag, 9. September 2016 08:51
  • ok danke :)

    ich werde mich mal einlesen

    Freitag, 9. September 2016 09:00
  • Hi,

    so habe Dir mal hier ein auf die schnelle noch ein kleines einfaches Beispiel gebaut auf dem du aufbauen kannst, also Dateien an Hand des Monates zu kopieren.

    # Ziel-SubFolder anlegen [einmalig] 1..12 | ForEach-Object { New-Item -Type Directory E:\Test\$_ }
    # Auf Quelle positionieren
    Set-Location C:\Daten # von da recursive alle Dateien mit der Endung .txt in die Zielverzeichnisse kopieren Get-ChildItem -recurse -Filter *.txt | Foreach-Object { Copy-Item -Path $_.FullName -Destination "E:\Test\$($_.CreationTime.Month)" }


    Damit kannst Du ja mal arbeiten, ich denke aber nur nach Monat zu gliedern ist nicht glücklich, besser pro Jahr je 12 Verzeichnisse oder so ...


    • Bearbeitet brima Freitag, 9. September 2016 09:44
    • Als Antwort markiert conand Freitag, 9. September 2016 10:51
    Freitag, 9. September 2016 09:42
  • Hatte bis zu deinem Vorschlag Fehlermeldungen bei Dateien aus Unterverzeichnissen.

    Geht jetzt aber mit Get-ChildItem

    Hab bei Get-ChildItem nur noch den Filter rausgenommen und -file hinzugefügt das nicht die ganzen leeren Ordner mit genommen werden.

    Kann als closed betrachtet werden

    Danke

    Freitag, 9. September 2016 10:28
  • Hallo,

    ok freut mich, dann bitte die entsprechneden Einträge von mir als Antowrt maekieren. siehe: Click

    Beste Gruesse
    brima

    Freitag, 9. September 2016 10:43