Powershell 如何正确使用Copy Item cmdlet复制管道文件

Powershell 如何正确使用Copy Item cmdlet复制管道文件,powershell,copy,powershell-2.0,Powershell,Copy,Powershell 2.0,我正在构建一个小脚本,它应该将所有.zip文件复制到一个名为F:\tempzip的特殊文件夹中 我用cmdlet尝试过,但没有成功。脚本应(递归地)复制此文件夹中“.zip”的所有文件 这是我所说的剧本的一部分: get-childitem F:\Work\xxx\xxx\xxx -recurse ` | where {$_.extension -eq ".zip"} ` | copy-item F:\tempzip 我必须添加什么?将项目输送到复制项目时,需要告诉它“

我正在构建一个小脚本,它应该将所有
.zip
文件复制到一个名为
F:\tempzip
的特殊文件夹中

我用cmdlet尝试过,但没有成功。脚本应(递归地)复制此文件夹中“.zip”的所有文件

这是我所说的剧本的一部分:

get-childitem F:\Work\xxx\xxx\xxx -recurse `
   | where {$_.extension -eq ".zip"}       `
   | copy-item F:\tempzip

我必须添加什么?

将项目输送到
复制项目时,需要告诉它
“F:\tempzip”
是目标路径

| Copy-Item -Destination F:\tempzip
您还可以通过使用
Get ChildItem
的参数
-filter
来切断到
where
操作符的管道

Get-Childitem "C:\imscript" -recurse -filter "*.zip" | Copy-Item -Destination "F:\tempzip"

Edit:删除不必要的
foreach
循环并更新解释

比这简单多了复制项有自己的-递归开关。你所要做的就是:

Copy-Item F:\Work\xxx\xxx\xxx\*.zip F:\tempzip -Recurse

不管出于什么原因,复制项递归没有实现我想要的,正如这里提到的,以及它是如何被记录下来工作的。如果在任意深度的子文件夹层次结构中有一堆*.zip或*.jpg文件,并且希望将它们复制到单个位置(一个平面文件夹,其他位置),我最好使用一个涉及Get ChildItem的管道命令。假设您当前在包含搜索根目录的文件夹中:

Get-ChildItem -Recurse -Include *.zip | Copy-Item -Destination C:\Someplace\Else

该命令将复制所有文件,而不会复制文件夹层次结构。

我认为向get-childitem命令添加筛选器比过滤结果更有效:get-childitem-filter*.zip-Recurse我不能使用筛选器,因为它只是我脚本的一部分。我复制了许多在不同子文件夹中创建的zip文件。所以我需要一个递归搜索。用你的全部道路,它成功了:)谢谢你。有了过滤器,它就不工作了。因此,我仍然有我的recursive searchCopy项目应该足够智能,可以处理FileInfo对象,实际上,这样您就不需要那里的
.FullName
。是的,它有一个内置的recures开关,但您需要使用
-recurse
参数来激活它。另外,尝试在文件夹路径处进行筛选对
复制项目
也不起作用。您最好使用
-filter
参数。因此,它看起来像是这样的
复制项F:\Work\xxx\xxx\xxx\F:\tempzip-Recurse-filter*.zip
,但这会将文件夹及其子文件夹复制到目标文件夹中,而不仅仅是.zip文件。多么邋遢-我的答案是复制项有自己的-Recurse开关,但我忽略了-Recurse开关。:)我修正了答案。现在更有意义了:)这就是我需要的,将所有类型的文件递归复制到平面结构中。