Powershell 3.0:COPY-ITEM筛选或包含选项无法工作

18

当使用Powershell 3.0时,-Filter参数或-Inlcude参数是否对任何人有效?我尝试了以下两个命令:

Copy-Item -Path c:\temp -Include "*.TXT" -Destination C:\temp2

并且

Copy-Item -Path c:\temp -Filter "*.TXT" -Destination C:\temp2

实际上,对于“-Filter”选项,在c:\TEMP2中会创建一个空的“temp”文件夹。我知道以下命令是有效的:

Copy-Item -Path c:\temp\*.TXT -Destination C:\temp2

但我只是想知道是否有人遇到过这个问题?

1个回答

38
这是因为您将输入Copy-Item的项目是文件夹,而不是文件夹内部的文件
当您执行以下命令时:
Copy-Item -Path c:\temp -Include "*.txt" -Destination C:\temp2
你说的是:复制项目,其中路径是文件夹 c:\temp。唯一选择要复制的项目是目录 c:\temp。然后我们说,只包括与“*.txt”匹配的项。由于唯一的项(文件夹“temp”)不匹配该模式,所以我们什么也不做。
为了证明这一点,让我们将包含筛选器更改为“temp”,并重新执行它:
Copy-Item -Path c:\temp -Include "temp" -Destination C:\temp2

完成!在目标文件夹中,我们有了一个新的空文件夹:c:\temp2\temp。(它是空的,因为我们只复制了文件夹"temp",我们没有告诉它复制其他任何东西)

因此,在第二部分中,当您执行:

Copy-Item -Path c:\temp\*.txt -Destination C:\temp2

它之所以有效,是因为你使用了*.txt,遍历匹配*.txt模式的目录中的所有项目,并将这些路径提供给Copy-Item,然后复制到目标位置。

为了证明这一点,让我们进行更改,并指定一个包含筛选器:

Copy-Item -Path c:\temp\* -Include "*.txt" -Destination C:\temp2
我们在这里说的是,获取文件夹 c:\temp 中的所有项目(即我们正在获取文件夹 c:\temp 内部的所有项目,而不是文件夹 c:\temp 本身),按仅包括符合“*.txt”模式的项目进行过滤,并复制到目标位置。

2
那很容易。谢谢你的提示。圣诞快乐! - inquisitive_one
2
我喜欢这个答案。但愿它能够运行。我正在使用“-Recursive”,但似乎会破坏“-Include”的功能。这是已知的问题吗?有没有解决方法?谢谢! - yoyo

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