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?


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


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


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

Działa również.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.