我正在为 MS PowerShell 编写脚本。该脚本使用该Copy-Item
命令。此命令的可选参数之一是“ -container
”。该参数的文档指出,指定此参数“在复制操作期间保留容器对象”。
这一切都很好,因为我将是最后一个在复制操作期间想要未保存的容器对象的人。但说真的,这个论点有什么用呢?特别是在我将磁盘目录树从一个地方复制到另一个地方的情况下,这对Copy-Item
命令的行为有什么影响?
我正在为 MS PowerShell 编写脚本。该脚本使用该Copy-Item
命令。此命令的可选参数之一是“ -container
”。该参数的文档指出,指定此参数“在复制操作期间保留容器对象”。
这一切都很好,因为我将是最后一个在复制操作期间想要未保存的容器对象的人。但说真的,这个论点有什么用呢?特别是在我将磁盘目录树从一个地方复制到另一个地方的情况下,这对Copy-Item
命令的行为有什么影响?
我也发现文档帮助不大。我做了一些测试,以了解该-Container
参数在-Recurse
复制文件和文件夹时是如何工作的。
请注意,这-Container
意味着-Container: $true
.
这是我用于示例的文件结构:
# X:.
# ├───destination
# └───source
# │ source.1.txt
# │ source.2.txt
# │
# └───source.1
# source.1.1.txt
X:\
.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 (...)
文档所讨论的容器是文件夹结构。如果您正在执行递归复制并希望保留文件夹结构,则可以使用 -container 开关。(注意:默认情况下 -container 开关设置为 true,所以你真的不需要指定它。如果你想关闭它,你可以使用-container: $false
。)
这有一个问题......如果您列出目录并将其通过管道传输到 Copy-Item,它将不会保留文件夹结构。如果要保留文件夹结构,则必须指定 -path 属性和 -recurse 开关。