Domanda

Sto scrivendo uno script per MS PowerShell. Questo script utilizza il comando Copy-Item . Uno degli argomenti opzionali per questo comando è " -container " ;. La documentazione per l'argomento afferma che specificando questo argomento " Preserva gli oggetti contenitore durante l'operazione di copia. & Quot;

Va ??tutto bene, poiché sarei l'ultima persona a desiderare oggetti contenitore non conservati durante un'operazione di copia. Ma con tutta serietà, cosa fa questo argomento? Soprattutto nel caso in cui sto copiando un albero di directory del disco da un posto a un altro, che differenza fa al comportamento del comando Copy-Item ?

È stato utile?

Soluzione

Il contenitore di cui parla la documentazione è la struttura delle cartelle. Se si sta eseguendo una copia ricorsiva e si desidera preservare la struttura delle cartelle, utilizzare l'opzione -container. (Nota: per impostazione predefinita l'opzione -container è impostata su true, quindi non è necessario specificarlo. Se si desidera disattivarlo, è possibile utilizzare -container: $ false .)

C'è un problema in questo ... se fai un elenco di directory e lo installi a Copy-Item, non manterrà la struttura delle cartelle. Se si desidera preservare la struttura delle cartelle, è necessario specificare la proprietà -path e l'opzione -recurse.

Altri suggerimenti

Anch'io ho trovato la documentazione meno utile. Ho fatto alcuni test per vedere come il parametro -Container funziona insieme a -Recurse durante la copia di file e cartelle.

Nota che -Container significa -Container: $ true .

Questa è la struttura del file che ho usato per gli esempi:

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • Per tutti gli esempi, la posizione corrente (pwd) è X: \ .
  • Ho usato PowerShell 4.0.

1) Per copiare solo la cartella di origine (cartella vuota):

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

Di seguito viene riportato un errore:

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) Per copiare l'intera struttura di cartelle con i file:

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) Per copiare tutti i discendenti (file e cartelle) in una singola cartella:

Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
#    X:.
#    ├───destination
#    │   │   source.1.1.txt
#    │   │   source.1.txt
#    │   │   source.2.txt
#    │   │
#    │   └───source.1
#    └───source (...)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top