这是因为您输入 Copy-Item 的项目是文件夹,而不是文件夹内的文件。
当你执行:
Copy-Item -Path c:\temp -Include "*.txt" -Destination C:\temp2
您是说:复制项目,其中路径是文件夹 c:\temp。选择复制的唯一项目是目录c:\temp。然后我们说,只有 -Include 匹配“*.txt”的项目。由于唯一的项目(文件夹“temp”)与模式不匹配,我们什么也不做。
为了证明这一点,让我们将 Include 过滤器更改为“temp”,然后重新执行它:
Copy-Item -Path c:\temp -Include "temp" -Destination C:\temp2
瞧!在目标文件夹中,我们有一个新的空文件夹:c:\temp2\temp。(它是空的,因为我们告诉它复制的唯一项目是文件夹“temp”,我们没有告诉它复制其他任何东西)
所以对于第 2 部分,当您执行时:
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”,然后复制到目的地。