Jump to content

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


Go to solution Solved by ed_22,

Recommended Posts

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 to post

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. ;-) 

Link to post
vor 33 Minuten schrieb ed_22:
  • advertisement_alt
  • advertisement_alt
  • advertisement_alt

ich habe mich ein wenig in Powershell versucht.

 

Jetzt kannst du dich im Debugging versuchen.

Geh dein Script Zeilenweise durch und schaue, was in jeder Variable steht.

Link to post
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 to post
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?

 

Edited by BOfH_666
Link to post

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 to post
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 to post
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 to post

Du sollst doppelte Hochkomma verwenden. 

 

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

Link to post
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 to post

Die Fehlermeldung ist doch aussagekräftig. 

 

Gibt es das Property FullName im Objekt überhaupt? Beim Get-ChildItem gibt es das, bei dir hängt er den String anscheinend anstatt ihn auzulösen.

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...