Pergunta

Eu estou escrevendo um script para MS PowerShell. Este script usa o comando Copy-Item. Um dos argumentos opcionais para este comando é "-container". A documentação para os estados argumento que especificar este argumento "objetos de recipiente conservas durante a operação de cópia."

Esta é tudo muito bem, porque eu seria a última pessoa a querer objetos de recipiente não preservadas durante uma operação de cópia. Mas com toda a seriedade, o que esse argumento faz? Particularmente no caso onde eu estou copiando uma árvore de diretórios do disco de um lugar para outro, que diferença isso faz para o comportamento do comando Copy-Item?

Foi útil?

Solução

O recipiente a documentação está falando é a estrutura da pasta. Se você estiver fazendo uma cópia recursiva e quer preservar a estrutura de pastas, você usaria o interruptor -container. (Nota:.. Por padrão o interruptor -container é definido como verdadeiro, então você realmente não precisa especificá-lo Se você queria desligá-lo você poderia usar -container: $false)

Há um prendedor para isso ... se você fizer uma listagem de diretório e canalizá-lo para Copy-Item, ele não vai preservar a estrutura da pasta. Se você quiser preservar a estrutura de pastas, você tem que especificar a propriedade -caminho eo interruptor -recurse.

Outras dicas

Eu também encontrei a documentação menos do que útil. Eu fiz alguns testes para ver como o parâmetro -Container trabalha em conjunto com -Recurse ao copiar arquivos e pastas.

Note que isso significa -Container -Container: $true.

Esta é a estrutura do arquivo que eu usei para os exemplos:

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • Para todos os exemplos, a localização atual (pwd) é X:\.
  • Eu costumava PowerShell 4.0.

1) Para copiar apenas a pasta de origem (pasta vazia):

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

A seguir dá um erro:

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 a estrutura de pastas com arquivos:

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 os descendentes (arquivos e pastas) em uma única pasta:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top