Powershell Copy-Item rekursiv, aber ohne Ordnernamen

18

Das ist eine dumme Frage, aber ich weiß einfach nicht, warum es nicht funktioniert.

Ich versuche, die Dateien rekursiv von FolderA nach FolderB zu kopieren. Ich mache das:

Copy-Item -Path "C:\FolderA\" -Destination "C:\FolderB\" -recurse -Force -Verbose

Es funktioniert super, kein Problem.

Außer das Ergebnis in FolderB ist folgendes:

C:\FolderB\FolderA\file.txt

Ich möchte, dass es so ist:

C:\FolderB\file.txt

Was für eine blöde offensichtliche Sache vermisse ich?

CleverPatrick
quelle
3
Du machst nichts Dummes, Kopierartikel ist nur eine PITA.
StingyJack

Antworten:

27

Ihr Befehl weist PowerShell an, den Ordner selbst mit seinem gesamten Inhalt in den Zielordner zu kopieren. Um nur den Inhalt des Originalordners zu kopieren, ändern Sie Ihren Pfad wie folgt:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

Beachten Sie das Sternchen (*) nach dem Ordnernamen. Dadurch wird der Inhalt (einschließlich der Unterordner) des Ordners kopiert, nicht jedoch der Ordner selbst in den Zielordner.

Verwenden des Cmdlets Copy-Item

Schnelles Ethernet
quelle
2
Beachten Sie, dass dadurch die Ordnerstruktur nicht kopiert wird, wenn der Zielordner nicht vorhanden ist. Aufruf md "C:\FolderB"vor Copy-Itemscheint dieses Problem zu vermeiden.
Zett42
Aufbauend auf dem obigen Kommentar von @ zett42 scheint der Zielordner, wenn er noch nicht vorhanden ist, Copy-Itemdie Ordnerstruktur zu reproduzieren, aber eine Ebene tiefer (z. B. C:\FolderA\B\Cwird C:\FolderB\Canstelle von kopiert C:\FolderB\B\C) und kann auch fehlschlagen, wenn mehrere Unterordner vorhanden sind. Stellen Sie immer sicher, dass der Zielordner vorhanden ist, bevor Sie Copy-Item aufrufen. Dies riecht nach einem Fehler (ich kann keinen Grund erkennen, warum dieses inkonsistente Verhalten wünschenswert wäre).
Marc Durdin
1
Siehe auch Kommentar zu SO .
Marc Durdin
0

Sie können -File -Recurse nur zum rekursiven Kopieren von Dateien verwenden:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -File -recurse -Force -Verbose

Oder verwenden Sie -Directory -Recurse, um nur die Empy-Ordnerstruktur zu kopieren:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -Directory -recurse -Force -Verbose

Mit freundlichen Grüßen,

Paul Pedroza

Paul Andres Pedroza M.
quelle
-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Würde auch funktionieren.

Mark Gladson
quelle
1
Dies scheint ein Kommentar zu FastEthernets ähnlicher Antwort zu sein. Wenn Sie eine alternative Antwort vorschlagen möchten, sollten Sie erklären, warum die Frage beantwortet wird.
Blackwood
Dadurch wird C: \ FolderB erstellt, wenn es nicht vorhanden ist. Wenn C: \ FolderB vorhanden ist, wird C: \ FolderB \ FolderA erstellt. Wenn Sie diesen Befehl zweimal ausführen, können Sie zwei Kopien von allem an leicht unterschiedlichen Orten erhalten! So viel Schmerz.
Lamarth