Powershell以递归方式排除

时间:2015-11-29 21:11:41

标签: powershell

我似乎在排除错误和在powershell中递归复制目录时遇到了麻烦。

我想以递归方式复制目录,但要包含与test.txt匹配的任何文件。

我的源目录看起来像这样

    • 的test.txt
    • test.ps1
    • TESTDIR
      • 的test.txt
      • test.ps1

运行以下命令会产生以下输出。它的副本排除了test.txt的第一个实例,但不包括第二个实例。我错过了什么?

  • 复制Root
    • test.ps1
    • TESTDIR
      • 的test.txt
      • test.ps1

我的剧本:

Get-ChildItem -Path .\TestDir -Recurse -Exclude test.txt | Copy-Item -Destination .\temporary -Recurse -Exclude text.txt

1 个答案:

答案 0 :(得分:2)

我承认,我Nerd Sniped我自己也是这样做的,并且有一个“不会很难的井......”

问题似乎是,如果复制项目获得了目录的最轻微的气味,它只是复制整个事物而不考虑其中的内容,完全忽略了过程中的任何过滤概念!

在尝试解决过滤问题时,我偶然发现this excellent answer -

您的解决方案似乎是这样的 -

$source = "E:\PS\test-output\test"
$dest = "E:\PS\test-output\test1"
$exclude = @('test.txt') 
Get-ChildItem $source -Recurse -Exclude $exclude `
    | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($source.length)}

这会丢弃复制项目(看似脑死亡)的递归并建立自己的。