Powershell Copy-Item recursivamente, mas não inclui o nome da pasta

19

Esta é uma pergunta estúpida, mas simplesmente não sei por que não está funcionando.

Estou tentando copiar os arquivos da pasta A para a pasta B recursivamente. Eu estou fazendo isso:

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

Funciona muito bem, não há problema.

Exceto que o resultado na Pasta B é este:

C:\FolderB\FolderA\file.txt

Considerando que eu quero que seja:

C:\FolderB\file.txt

Que coisa óbvia estúpida estou perdendo?

CleverPatrick
fonte
4
Você não está fazendo nada estúpido, copiar itens é apenas uma PITA.
precisa saber é o seguinte

Respostas:

27

Seu comando está dizendo ao PowerShell para copiar a própria pasta, com todo o seu conteúdo, para a pasta de destino. Para copiar apenas o conteúdo da pasta original, altere o caminho da seguinte maneira:

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

Observe o asterisco (*) após o nome da pasta. Isso copiará o conteúdo (incluindo subpastas) da pasta, mas não a própria pasta para a pasta de destino.

Usando o cmdlet Copy-Item

Ethernet rápida
fonte
2
Observe que isso não copia a estrutura da pasta se a pasta de destino não existir. Ligar md "C:\FolderB"antes Copy-Itemparece evitar esse problema.
Zett42 # 29/19
Com base no comentário do @ zett42 acima, se a pasta de destino ainda não existir, parece que Copy-Itemela reproduzirá a estrutura da pasta, mas um nível abaixo (por exemplo, C:\FolderA\B\Cé copiado para em C:\FolderB\Cvez de C:\FolderB\B\C) e também poderá falhar quando existirem várias subpastas. Sempre verifique se a pasta de destino existe antes de chamar o item de cópia. Isso cheira a um bug (não vejo nenhum motivo pelo qual esse comportamento inconsistente seria desejável).
Marc Durdin
11
Veja também comentar sobre SO .
Marc Durdin
0

Você pode usar -File -Recurse para copiar apenas arquivos recursivamente:

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

Ou use -Directory -Recurse para copiar apenas a estrutura de pastas empy:

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

Atenciosamente,

Paul Pedroza

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

Também funcionaria.

Mark Gladson
fonte
11
Parece ser um comentário à resposta semelhante da FastEthernet. Se você deseja propor uma resposta alternativa, explique por que ela responde à pergunta.
Blackwood
Isso cria C: \ FolderB se ele não existir - mas cria C: \ FolderB \ FolderA se C: \ FolderB existir. Se você executar esse comando duas vezes, poderá obter duas cópias de tudo em locais ligeiramente diferentes! Muita dor.
Lamarth 19/12/19