Powershell Copy-Item recursivamente pero no incluye el nombre de la carpeta


19

Esta es una pregunta estúpida, pero no sé por qué no funciona.

Estoy tratando de copiar los archivos de la carpeta A a la carpeta B de forma recursiva. Yo estoy haciendo esto:

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

Funciona muy bien, no hay problema.

Excepto que el resultado en FolderB es este:

C:\FolderB\FolderA\file.txt

Mientras que quiero que sea:

C:\FolderB\file.txt

¿Qué estúpido obvio me estoy perdiendo?


44
No estás haciendo nada estúpido, el elemento de copia es solo un PITA.
StingyJack

Respuestas:


27

Su comando le dice a PowerShell que copie la carpeta en sí, con todo su contenido, en la carpeta de destino. Para copiar solo el contenido de la carpeta original, cambie su ruta de la siguiente manera:

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

Observe el asterisco (*) después del nombre de la carpeta. Esto copiará el contenido (incluidas las subcarpetas) de la carpeta, pero no la carpeta en sí a la carpeta de destino.

Usar el cmdlet Copiar elemento


2
Tenga en cuenta que esto no copia la estructura de la carpeta si la carpeta de destino no existe. Llamar md "C:\FolderB"antes Copy-Itemparece evitar este problema.
zett42

Sobre la base del comentario de @ zett42 anterior, si la carpeta de destino aún no existe, parece Copy-Itemque reproducirá la estructura de la carpeta, pero un nivel hacia abajo (por ejemplo, C:\FolderA\B\Cse copia en C:\FolderB\Clugar de C:\FolderB\B\C) y también puede fallar cuando existen varias subcarpetas. Asegúrese siempre de que la carpeta de destino existe antes de llamar a Copy-Item. Esto huele a un error (no puedo ver ninguna razón por la cual este comportamiento inconsistente sería deseable).
Marc Durdin

1
Ver también comentar sobre SO .
Marc Durdin

0

Puede usar -File -Recurse para copiar solo archivos de forma recursiva:

Copiar elemento -Path "C: \ Source" -Destination "C: \ Dest" -File -recurse -Force -Verbose

O use -Directory -Recurse para copiar solo la estructura de la carpeta vacía :

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

Saludos cordiales,

Paul Pedroza


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

También funcionaría


1
Esto parece ser un comentario sobre la respuesta similar de FastEthernet. Si desea proponer una respuesta alternativa, debe explicar por qué responde la pregunta.
Blackwood

Eso crea C: \ FolderB si no existe, pero crea C: \ FolderB \ FolderA si C: \ FolderB existe. ¡Si ejecuta ese comando dos veces, puede obtener dos copias de todo en ubicaciones ligeramente diferentes! Mucho dolor.
Lamarth
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.