如何正确使用Copy-Item cmdlet?

Ray*_*and 13 powershell copy powershell-2.0

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

我尝试使用Copy-Item cmdlet,但我没有设法做到这一点.该脚本应该复制此文件夹中的所有文件(递归),即".zip".

这是我正在讨论的脚本的一部分:

get-childitem F:\Work\xxx\xxx\xxx -recurse `
   | where {$_.extension -eq ".zip"}       `
   | copy-item F:\tempzip
Run Code Online (Sandbox Code Playgroud)

我需要添加什么?

Adi*_*bar 13

它比这简单得多.Copy-Item有自己的-Recurse开关.你所要做的就是:

Copy-Item F:\Work\xxx\xxx\xxx\*.zip F:\tempzip -Recurse
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 11

管道物品copy-item需要告诉它"F:\tempzip"是目的地路径.

| Copy-Item -Destination F:\tempzip
Run Code Online (Sandbox Code Playgroud)

您还可以where使用Get-ChildItem参数切断到操作员的管道-filter.

Get-Childitem "C:\imscript" -recurse -filter "*.zip" | Copy-Item -Destination "F:\tempzip"
Run Code Online (Sandbox Code Playgroud)

编辑:删除不必要的foreach循环和更新的说明.

  • 我相信在get-childitem命令行开关中添加过滤器比过滤结果更有效:Get-ChildItem -Filter*.zip -Recurse (2认同)

Gre*_*reg 5

无论出于何种原因,如本文所述,Copy-Item递归都无法实现我想要的功能,以及如何记录其工作方式。如果您在任意深的子文件夹层次结构中有一堆* .zip或* .jpg文件,并且想将它们复制到一个位置(一个平面文件夹,在其他位置),那么我最好使用涉及Get-ChildItem的管道命令。假设您当前位于包含搜索根目录的文件夹中:

Get-ChildItem -Recurse -Include *.zip | Copy-Item -Destination C:\Someplace\Else
Run Code Online (Sandbox Code Playgroud)

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