2008-09-24 6 views
23

J'écris un script pour MS PowerShell. Ce script utilise la commande Copy-Item. L'un des arguments facultatifs de cette commande est "-container". La documentation de l'argument indique que la spécification de cet argument "Préserve les objets du conteneur pendant l'opération de copie".Quelle est la signification de l'argument -container de Powershell's Copy-Item?

Tout cela est très bien, car je serais la dernière personne à vouloir des objets conteneurs non conservés pendant une opération de copie. Mais en toute sincérité, que fait cet argument? Particulièrement dans le cas où je copie un arbre de répertoire disque d'un endroit à un autre, quelle différence cela fait-il au comportement de la commande Copy-Item?

Répondre

22

Le conteneur dont parle la documentation est la structure de dossiers. Si vous effectuez une copie récursive et souhaitez conserver la structure du dossier, vous devez utiliser le commutateur -container. (Remarque: par défaut, le commutateur -container est défini sur true, vous n'avez donc pas besoin de le spécifier.Si vous voulez l'éteindre, vous pouvez utiliser -container: $false.)

Il y a un problème à cela ... Si vous faites une liste de répertoires et que vous la redirigez vers Copy-Item, la structure du dossier ne sera pas conservée. Si vous voulez conserver la structure du dossier, vous devez spécifier la propriété -path et le commutateur -recurse.

+0

qui est très clair. Je vous remercie! –

+3

-container est un commutateur, il a donc besoin de ':' pour le passage de la valeur. '-container: $ false'. –

34

J'ai également trouvé la documentation moins qu'utile. J'ai fait quelques tests pour voir comment le paramètre -Container fonctionne en conjonction avec -Recurse lors de la copie de fichiers et de dossiers.

Notez que -Container signifie -Container: $true.

C'est la structure de fichier que j'ai utilisé pour les exemples:

# X:. 
# ├───destination 
# └───source 
#  │ source.1.txt 
#  │ source.2.txt 
#  │ 
#  └───source.1 
#    source.1.1.txt 
  • Pour tous les exemples, l'emplacement actuel (PWD) est X:\.
  • J'ai utilisé PowerShell 4.0.

1) Pour copier uniquement le dossier source (dossier vide):

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

Ce qui suit donne une erreur:

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) Pour copier l'ensemble structure de dossiers avec des fichiers:

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) Pour copier tous les descendants (fichiers et dossiers) dans un seul dossier:

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

Cette réponse mérite plus de votes. Cela ne laisse rien à l'imagination. +1 –

Questions connexes