Powershell Copy-Item rekurencyjnie, ale nie zawiera nazwy folderu

20

To głupie pytanie, ale po prostu nie wiem, dlaczego to nie działa.

Próbuję rekurencyjnie kopiować pliki z folderu A do folderu B. Robię to:

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

Działa świetnie, nie ma problemu.

Z wyjątkiem wyniku w folderze B jest to:

C:\FolderB\FolderA\file.txt

Podczas gdy chcę, aby to było:

C:\FolderB\file.txt

Jakiej głupiej oczywistej rzeczy brakuje mi?

CleverPatrick
źródło
4
Nie robisz nic głupiego, kopiowanie to tylko PITA.
StingyJack

Odpowiedzi:

28

Twoje polecenie mówi PowerShellowi, aby skopiował sam folder z całą zawartością do folderu docelowego. Aby skopiować tylko zawartość oryginalnego folderu, zmień ścieżkę w następujący sposób:

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

Zwróć uwagę na gwiazdkę (*) po nazwie folderu. Spowoduje to skopiowanie zawartości (w tym podfolderów) folderu, ale nie samego folderu do folderu docelowego.

Korzystanie z polecenia cmdlet Copy-Item

FastEthernet
źródło
2
Pamiętaj, że nie kopiuje to struktury folderów, jeśli folder docelowy nie istnieje. Dzwonienie md "C:\FolderB"wcześniej Copy-Itemwydaje się unikać tego problemu.
zett42
Opierając się na powyższym komentarzu @ zett42, jeśli folder docelowy jeszcze nie istnieje, wygląda na to, że Copy-Itemodtworzy strukturę folderów, ale o jeden poziom niżej (np. Zostanie C:\FolderA\B\Cskopiowany C:\FolderB\Czamiast C:\FolderB\B\C) i może również zawieść, gdy istnieje wiele podfolderów. Zawsze upewnij się, że folder docelowy istnieje przed wywołaniem elementu kopiowania. Pachnie to jak błąd (nie widzę żadnego powodu, dla którego to niespójne zachowanie byłoby pożądane).
Marc Durdin
1
Zobacz także komentarz do SO .
Marc Durdin
0

Możesz użyć -File -Recurse dla Rekursywnie kopiuj tylko pliki:

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

Lub użyj -Directory -Recurse, aby skopiować tylko strukturę folderów empy:

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

Z poważaniem,

Paul Pedroza

Paul Andres Pedroza M.
źródło
-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Działa również.

Mark Gladson
źródło
1
To wydaje się być komentarzem do podobnej odpowiedzi FastEthernet. Jeśli chcesz zaproponować alternatywną odpowiedź, powinieneś wyjaśnić, dlaczego odpowiada na pytanie.
Blackwood
To tworzy C: \ FolderB, jeśli nie istnieje - ale tworzy C: \ FolderB \ FolderA, jeśli C: \ FolderB istnieje. Jeśli uruchomisz to polecenie dwa razy, możesz uzyskać dwie kopie wszystkiego w nieco innych lokalizacjach! Tyle bólu.
Lamarth