¿Cuál es el significado del argumento del contenedor de elementos de copia de Powershell?

StackOverflow https://stackoverflow.com/questions/129088

  •  02-07-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un script para MS PowerShell. Este script usa el comando Copy-Item . Uno de los argumentos opcionales de este comando es " -container " ;. La documentación del argumento establece que al especificar este argumento "Preserva los objetos del contenedor durante la operación de copia".

Todo esto está muy bien, ya que sería la última persona en querer objetos contenedor sin preservar durante una operación de copia. Pero con toda seriedad, ¿qué hace este argumento? Particularmente en el caso en el que estoy copiando un árbol de directorio de disco de un lugar a otro, ¿qué diferencia tiene esto en el comportamiento del comando Copy-Item ?

¿Fue útil?

Solución

El contenedor del que habla la documentación es la estructura de carpetas. Si está haciendo una copia recursiva y desea preservar la estructura de la carpeta, usaría el modificador -container. (Nota: de manera predeterminada, el modificador -container está establecido en true, por lo que realmente no necesitaría especificarlo. Si desea desactivarlo, puede usar -container: $ false ).

Hay un problema con esto ... si hace un listado de directorio y lo canaliza a Copy-Item, no conservará la estructura de la carpeta. Si desea preservar la estructura de carpetas, debe especificar la propiedad -path y el modificador -recurse.

Otros consejos

También encontré la documentación menos útil. Hice algunas pruebas para ver cómo funciona el parámetro -Container junto con -Recurse al copiar archivos y carpetas.

Tenga en cuenta que -Container significa -Container: $ true .

Esta es la estructura de archivos que utilicé para los ejemplos:

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • Para todos los ejemplos, la ubicación actual (pwd) es X: \ .
  • Usé PowerShell 4.0.

1) Para copiar solo la carpeta de origen (carpeta vacía):

Copy-Item -Path source -Destination .\destination
Copy-Item -Path source -Destination .\destination -Container
#    X:.
#    ├───destination
#    │   └───source
#    └───source (...)

Lo siguiente da un error:

Copy-Item -Path source -Destination .\destination -Container: $false
# Exception: Container cannot be copied to another container. 
#            The -Recurse or -Container parameter is not specified.     

2) Para copiar toda la estructura de carpetas con archivos:

Copy-Item -Path source -Destination .\destination -Recurse
Copy-Item -Path source -Destination .\destination -Recurse -Container
#    X:.
#    ├───destination
#    │   └───source
#    │       │   source.1.txt
#    │       │   source.2.txt
#    │       │
#    │       └───source.1
#    │               source.1.1.txt
#    └───source (...)    

3) Para copiar todos los descendientes (archivos y carpetas) en una sola carpeta:

Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
#    X:.
#    ├───destination
#    │   │   source.1.1.txt
#    │   │   source.1.txt
#    │   │   source.2.txt
#    │   │
#    │   └───source.1
#    └───source (...)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top