Jump to content

Powershell: Ordner aus vorhandenen Dateien erstellen und Dateien dort rein kopieren


Direkt zur Lösung Gelöst von ed_22,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

ich habe mich ein wenig in Powershell versucht.

Ich möchte aus einem Verzeichnis die Dateien auslesen und anhand des Dateinamens
Ordner erstellen. Danach sollen die Dateien die am Anfang so heißen wie der Ordner
in diesen kopiert werden.

Die Ordner werden erstellt aber die Dateien nicht kopiert.

Es sind Hörspiele (mp3) die immer mit 045 - das Hoerspiel - 02 - das Kapitel.mp3
benannt sind. Es geht immer um die ersten beiden Angaben. 045 - das Hoerspiel
heißt dann der Ordner und alle Dateien die so Anfangen sollen da rein kopiert werden.

 

Könnt ihr mir da auf die Sprünge helfen?

 

$StartFolder = 'D:\Test'

#Dateien einlesen und splitten
Get-ChildItem $StartFolder\*-*-*-* -File | ForEach-Object {
    $CD,$Titel,$Track = $_.Name -split '-',3
 
 # Aus den gesplitteten Teilen Ordner erstelln   
   $Path="$StartFolder\$CD-$Titel"
   if (!(Test-Path $Path)) {New-Item -Path $Path -ItemType Directory} 
   #New-Item -Path $StartFolder\$CD-$Titel -ItemType Directory 


 # Die entsprechenden Dateien in die richtigen Ordner kopieren (geht nicht)
   
   $Name="$StartFolder\$CD-$Titel-$Track"
   move-Item -Path $Name -Destination $Path

      

 }   

 

 

Besten Dank

 

Thorsten

PS: Es kommt immer folgende Fehlermeldung:

 

move-Item : Falscher Parameter.
In D:\Test\test 2.ps1:16 Zeichen:4
+    move-Item -Path $Name -Destination $Path
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\Test\108 - D...8 - Soo-Ann.mp3:FileInfo) [Move-Item], IOException
    + FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

Link zu diesem Kommentar
vor 4 Minuten schrieb BOfH_666:

Thorsten,

 

Du benutzt für Dein Move-Item eine Variable, die Du gar nicht deklariert/gefüllt hast. Statt


move-Item -Path $Name -Destination $Path

würde ich eher 


move-Item -Path $_.FullName -Destination $Path

verwenden. ;-) 

 

Hallo, ich setze die Variable doch vorher mit 

 

$Name="$StartFolder\$CD-$Titel-$Track"

oder ist das nicht richtig?

 

Woher bekommt Powershell denn $_.FullName b.z.w. was bedeutet das?

vor 8 Minuten schrieb Nobbyaushb:

Kommt mir so bekannt vor - sowas war schon mal…

Da hast du recht. Daher habe ich mir ja auch bisher die Infos gezogen komme jetzt aber beim move nicht weiter

Link zu diesem Kommentar
vor 14 Minuten schrieb ed_22:

Hallo, ich setze die Variable doch vorher mit 

Oooops ... hatte ich tatsächlich überlesen.

 

Aber ... Du willst doch eigentlich die gerade in der Pipeline befindliche Datei kopieren/verschieben, oder? Und deren kompletter Pfad wird repräsentiert durch 

 

Zitat

Woher bekommt Powershell denn $_.FullName b.z.w. was bedeutet das?

 

bearbeitet von BOfH_666
Link zu diesem Kommentar

Hallo,

 

ich habe das gerade mal das Skript geändert und $_.FullName als Variable eingetragen.

 

Es funktioniert leider nicht.

Ich bekomme folgende Fehlermeldung:

 

move-Item : Falscher Parameter.
In D:\Test\test 2.ps1:16 Zeichen:4
+    move-Item -Path $_.FullName -Destination $Path
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\Test\108 - D...8 - Soo-Ann.mp3:FileInfo) [Move-Item], IOException
    + FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

 

Der Ordner wurde erstellt z.B.:

 

D:\Test\108 - Die sieben Tore

 

die Variable $Path gibt folgendes aus:

 

PS D:\Test> echo $Path 
D:\Test\108 - Die sieben Tore 

 

Was kann das noch sein?

 

Mfg

Thorsten

 

 

 

Link zu diesem Kommentar
vor 23 Minuten schrieb tesso:

Da sind Leerzeichen im Pfad. Ich würde die Variablen bei Path und Destination mal in Hochkomma setzen.

 

 

Ich habe das Skript jetzt so. Wo muss ich da die Hochkomma setzen?

 $StartFolder = 'D:\Test'

#Dateien einlesen und splitten
Get-ChildItem $StartFolder\*-*-*-* -File | ForEach-Object {
    $CD,$Titel,$Track = $_.Name -split '-',3
 
 # Aus den gesplitteten Teilen Ordner erstelln   
   $Path="$StartFolder\$CD-$Titel"
   if (!(Test-Path $Path)) {New-Item -Path $Path -ItemType Directory} 
   #New-Item -Path $StartFolder\$CD-$Titel -ItemType Directory 


 # Die entsprechenden Dateien in die richtigen Ordner kopieren (geht nicht)
   
   #$Name="$StartFolder\$CD-$Titel-$Track"
   move-Item -Path $_.FullName -Destination $Path

      

 }   

 

Link zu diesem Kommentar
vor 4 Minuten schrieb tesso:

Dort wo du sie verwendest (beim move).

Ein bisschen Mitarbeit erwarten wir hier schon.

Ich hatte das schon probiert aber es hat nicht funktioniert deshalb meine nachfrage.

Er löst dann die Variable nicht auf.

 

Einmal für dich zum verdeutlichen was ich gemacht habe und welcher Fehler dann kommt:

 

 move-Item -Path '$_.FullName' -Destination '$Path'

 

Fehlermeldung:

move-Item : Der Pfad "D:\Test\$_.FullName" kann nicht gefunden werden, da er nicht vorhanden ist.
In D:\Test\test 2.ps1:16 Zeichen:4
+    move-Item -Path '$_.FullName' -Destination '$Path'
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\Test\$_.FullName:String) [Move-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand

 

Link zu diesem Kommentar
vor 4 Minuten schrieb tesso:

Du sollst doppelte Hochkomma verwenden. 

 

Dir fehlen die absoluten Grundlagen. Hausaufgabe: Unterschied zwischen einfachen und doppelten Hochkommas erkunden. :D

 

Ich mache ja alles was du willst aber du meinst jetzt "Anführungsstriche oben".

Vorher hast du nichts von doppelten Hochkommas gesagt.

 

Aber geht auch nicht.

 

 move-Item -Path "$_.FullName" -Destination "$Path"

 

Fehlermeldung:

 

move-Item : Der Pfad "D:\Test\087 - Wolfsgesicht - 06 - Der Wolf zeigt seine Krallen.mp3.FullName" kann nicht gefunden werden, da er nicht vorhanden ist.
In D:\Test\test 2.ps1:16 Zeichen:4
+    move-Item -Path "$_.FullName" -Destination "$Path"
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\Test\087 - W...en.mp3.FullName:String) [Move-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand
 
 

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...