Powershell';s复制项目';s容器参数?

Powershell';s复制项目';s容器参数?,powershell,copy-item,Powershell,Copy Item,我正在为PowerShell女士编写脚本。此脚本使用Copy Item命令。此命令的可选参数之一是“-container”。此参数的文档说明,指定此参数“在复制操作期间保留容器对象” 这一切都很好,因为在复制操作期间,我将是最不希望使用未准备好的容器对象的人。但说真的,这个论点有什么用呢?特别是在我将磁盘目录树从一个地方复制到另一个地方的情况下,这对Copy Item命令的行为有什么影响?文档所讨论的容器是文件夹结构。如果您正在执行递归复制并希望保留文件夹结构,则可以使用-container开关

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


这一切都很好,因为在复制操作期间,我将是最不希望使用未准备好的容器对象的人。但说真的,这个论点有什么用呢?特别是在我将磁盘目录树从一个地方复制到另一个地方的情况下,这对
Copy Item
命令的行为有什么影响?

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


这有一个陷阱。。。如果执行目录列表并通过管道将其复制到项目,则不会保留文件夹结构。如果要保留文件夹结构,必须指定-path属性和-recurse开关

我也发现这些文档没有什么帮助。我做了一些测试,以了解在复制文件和文件夹时,
-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) 要仅复制源文件夹(空文件夹),请执行以下操作:

下面给出了一个错误:

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.
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 (...)    
Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
#    X:.
#    ├───destination
#    │   │   source.1.1.txt
#    │   │   source.1.txt
#    │   │   source.2.txt
#    │   │
#    │   └───source.1
#    └───source (...)