Powershell Copy-Item -container参数的含义是什么?

时间:2008-09-24 18:53:16

标签: powershell copy-item

我正在为MS PowerShell编写脚本。该脚本使用Copy-Item命令。此命令的可选参数之一是“-container”。参数的文档声明指定此参数“在复制操作期间保留容器对象。”

这一切都很好,因为在复制操作期间,我将是最后一个想要未选择的容器对象的人。但严肃地说,这个论点有什么作用?特别是在我将磁盘目录树从一个地方复制到另一个地方的情况下,这对Copy-Item命令的行为有何不同?

2 个答案:

答案 0 :(得分:57)

我也发现文档不太有帮助。在复制文件和文件夹时,我做了一些测试,以了解-Container参数如何与-Recurse一起使用。

请注意,-Container表示-Container: $true

这是我用于示例的文件结构:

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • 对于所有示例,当前位置(pwd)为X:\
  • 我使用的是PowerShell 4.0。

1)仅复制源文件夹(空文件夹):

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

以下是错误:

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)使用文件复制整个文件夹结构:

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)将所有后代(文件和文件夹)复制到一个文件夹中:

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

答案 1 :(得分:27)

文档所讨论的容器是文件夹结构。如果您正在进行递归复制并希望保留文件夹结构,则可以使用-container开关。 (注意:默认情况下,-container开关设置为true,因此您根本不需要指定它。如果您想将其关闭,可以使用-container: $false。)

有一个问题...如果您执行目录列表并将其传递给Copy-Item,它将不会保留文件夹结构。如果要保留文件夹结构,则必须指定-path属性和-recurse开关。