none
Order mit Powershell durchsuchen und Dateien eine Ordner Ebene höher schreiben RRS feed

  • Frage

  • Hallo zusammen,

    in der PowerShell Programmierung bin ich ein ziemlich blutiger Anfänger.

    Ich würde mich freuen, wenn mir jemand bei meinem Problem unter die Arme greifen könnte.

    Es geht um folgendes Problem:

    - Ich habe einen Musik Ordner in dem ITunes unter dem Interpreten ein Unbekanntes Album reingeschrieben hat erst dann kann ich meine Musik finden.

    - Ich würde gerne ein PowerShell Programm schreiben, was erst einmal alle Unbekannten Alben findet und dann in einer Schleife in das erste Album rein geht, die Musik Datei eine ebene höher schreibt und das Unbekannte Album löscht.

    Einen Befehl habe ich bereits gefunden um die Alben zu identifizieren. Ich weiß nur nicht wie ich diesen Befehl in eine Schleife einbauen kann. Ich vermute mal, dass ich eine For Schleife mit eine IF-Schleife kombinieren muss um die Musik Dateien eine Ordner Ebene höher zu schreiben.

    Hier die Befehlszeile die ich gefunden habe:

    gci -r | where-object {$_Name -like "Unknown Album"}

    Vielen Dank vorab für eure Hilfe.

    Viele Grüße


    • Bearbeitet Kyo1987 Sonntag, 25. Mai 2014 09:34
    Sonntag, 25. Mai 2014 09:34

Antworten

  • Hallo Kyo1987!

    Dir fehlt, wie du schon schreibst, nicht nur die PowerShell Grundlagen, sondern auch die gesamten Programmierer Grundlagen.

    PowerShell Produziert und Verarbeitet Objekte und keinen Text. Das muss man bei PowerShell verstanden haben.

    PowerShell hat eine Pipeline die ähnlich wie eine ForEach Schleife Arbeitet.
    Das Ergebnis von einen Kommando wird über das Pipeline Symbol | an den nächsten Befehl weitergegeben.

    Wenn man dieses Prinzip verstanden hat kann man sich viele Schleifen sparen.

    PowerShell bietet mehrere Schleifen hier wäre die ForEach Schleife die richtige.

    Ein IF z.B. ist keine Schleife sondern eine Verzweigung.
    Wenn (If) dann mach das, wenn nicht mach was anderes (Else).

    Dies alles können wir dir in einem Forum schlecht beibringen.
    Ich empfehle dir ein gutes PowerShell Buch zu lesen, oder einen anderen Grundlagen Kurs zu machen.
    Ich habe einen Youtube Video Kanal wo ich einen PowerShell Grundlagen Kurs anbiete.
    Dort wird aber nicht das Programmieren erklärt.
    Siehe den Link in meiner Signatur.

    Tipps für gute Bücher findest du hier:
    http://www.powershell-group.eu/buecher-books/

    Gutes Kostenloses Lehrmaterial findest du hier:
    http://www.powershell-group.eu/kostenlose-powershell-ebook-tutorial-workshop-howto/

    Dein Problem würde ich mit PowerShell so lösen:

    # Ein Objekt, das sich gerade in der Verarbeitung befindet, liegt in der Automatisch generierten Variable $_ 
    
    Get-ChildItem -Path 'E:\test\*' -Recurse | Where-Object { ($_.PsIsContainer -eq $True) -and ($_.Name -eq 'Unknown Album')} | ForEach-Object {
      
      # Verzeichnis Pfad eine Ebene Höher setzen
      $PfadInterpret = Split-Path $_.FullName
      
      # Dateien eine Ebene höher verschieben
      Get-ChildItem -Path $_.FullName |  Move-Item -Destination $PfadInterpret
    
      # Leeres Verzeichnis löschen
      Remove-Item -Path $_.FullName
    
    }



    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort vorgeschlagen brima Montag, 26. Mai 2014 07:47
    • Als Antwort markiert Alex Pitulice Freitag, 30. Mai 2014 11:01
    • Bearbeitet Peter Kriegel Montag, 2. Juni 2014 09:07
    Montag, 26. Mai 2014 06:12

Alle Antworten

  • Hallo Kyo1987!

    Dir fehlt, wie du schon schreibst, nicht nur die PowerShell Grundlagen, sondern auch die gesamten Programmierer Grundlagen.

    PowerShell Produziert und Verarbeitet Objekte und keinen Text. Das muss man bei PowerShell verstanden haben.

    PowerShell hat eine Pipeline die ähnlich wie eine ForEach Schleife Arbeitet.
    Das Ergebnis von einen Kommando wird über das Pipeline Symbol | an den nächsten Befehl weitergegeben.

    Wenn man dieses Prinzip verstanden hat kann man sich viele Schleifen sparen.

    PowerShell bietet mehrere Schleifen hier wäre die ForEach Schleife die richtige.

    Ein IF z.B. ist keine Schleife sondern eine Verzweigung.
    Wenn (If) dann mach das, wenn nicht mach was anderes (Else).

    Dies alles können wir dir in einem Forum schlecht beibringen.
    Ich empfehle dir ein gutes PowerShell Buch zu lesen, oder einen anderen Grundlagen Kurs zu machen.
    Ich habe einen Youtube Video Kanal wo ich einen PowerShell Grundlagen Kurs anbiete.
    Dort wird aber nicht das Programmieren erklärt.
    Siehe den Link in meiner Signatur.

    Tipps für gute Bücher findest du hier:
    http://www.powershell-group.eu/buecher-books/

    Gutes Kostenloses Lehrmaterial findest du hier:
    http://www.powershell-group.eu/kostenlose-powershell-ebook-tutorial-workshop-howto/

    Dein Problem würde ich mit PowerShell so lösen:

    # Ein Objekt, das sich gerade in der Verarbeitung befindet, liegt in der Automatisch generierten Variable $_ 
    
    Get-ChildItem -Path 'E:\test\*' -Recurse | Where-Object { ($_.PsIsContainer -eq $True) -and ($_.Name -eq 'Unknown Album')} | ForEach-Object {
      
      # Verzeichnis Pfad eine Ebene Höher setzen
      $PfadInterpret = Split-Path $_.FullName
      
      # Dateien eine Ebene höher verschieben
      Get-ChildItem -Path $_.FullName |  Move-Item -Destination $PfadInterpret
    
      # Leeres Verzeichnis löschen
      Remove-Item -Path $_.FullName
    
    }



    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort vorgeschlagen brima Montag, 26. Mai 2014 07:47
    • Als Antwort markiert Alex Pitulice Freitag, 30. Mai 2014 11:01
    • Bearbeitet Peter Kriegel Montag, 2. Juni 2014 09:07
    Montag, 26. Mai 2014 06:12
  • Hallo Peter,

    vielen Dank für die Antwort.

    Ich werde das von dir verwendete Script austesten.

    Vor ca. 7 Jahren hatte ich das letzte Mal etwas mit Programmierung zu tun.

    Jetzt versuche ich das vergangene Wissen etwas aufzufrischen.

    Danke für die Website mit dem Powershell Tutorial ich werde mir diese anschauen.

    VG Kyo

    Montag, 2. Juni 2014 05:44