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

47

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

这很好,因为我肯定不想在复制操作期间丢失容器对象。但认真地说,这个参数具体是做什么用的呢?特别是在我从一个位置拷贝磁盘目录树到另一个位置的情况下,这个参数对Copy-Item命令的行为有什么影响吗?

2个回答

80

我也发现文档不是很有帮助。我进行了一些测试,看看在复制文件和文件夹时-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 (...)

7
这个回答值得更多的投票。它没有让人产生想象空间。+1 - Ravi K Thapliyal

37
文档所提到的容器是文件夹结构。如果您要进行递归复制并想要保留文件夹结构,您需要使用-container开关。(注意:默认情况下,-container开关设置为true,因此您不需要指定它。如果您想要关闭它,可以使用-container: $false。)
但是有一个问题......如果您执行目录列表并将其管道传递给Copy-Item,则不会保留文件夹结构。如果您想要保留文件夹结构,则必须指定-path属性和-recurse开关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接