2008-09-24 12 views
23

Estoy escribiendo un script para MS PowerShell. Este script usa el comando Copy-Item. Uno de los argumentos opcionales para este comando es "-container". La documentación del argumento indica que al especificar este argumento "Conserva los objetos del contenedor durante la operación de copia".¿Cuál es el significado del argumento de Powershell's Copy-Item's -container?

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

Respuesta

22

El contenedor del que habla la documentación es la estructura de la carpeta. Si está haciendo una copia recursiva y desea conservar la estructura de la carpeta, usaría el botón -container. (Nota: de manera predeterminada, el interruptor -container está configurado en verdadero, por lo que realmente no necesitaría especificarlo. Si quisiera apagarlo, podría usar -container: $false.)

Hay una trampa para esto ... si hace una lista de directorios y la canaliza a Copy-Item, no conservará la estructura de la carpeta. Si desea conservar la estructura de carpetas, debe especificar la propiedad -path y el parámetro -recurse.

+0

Eso es muy claro. ¡Gracias! –

+3

-container es un interruptor, por lo que necesita ':' para pasar el valor. '-container: $ false'. –

34

Yo también encontré la documentación menos que ú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 he usado 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:\.
  • Utilicé PowerShell 4.0.

1) Para copiar sólo la carpeta de origen (carpeta vacío):

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

El 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 el conjunto 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 (...) 
+4

Esta respuesta se merece más votos. No deja nada a la imaginación. +1 –

Cuestiones relacionadas