Não é possível excluir um padrão de diretório recursivamente

23

Estou tentando obter itens filhos de uma pasta de forma recursiva. No entanto, a pasta contém arquivos de ruído e pasta (na verdade, essa é uma pasta de projeto do Visual Studio).

Aqui o que eu tenho:

$root = Get-Item C:\Projects\MyProject

$allItems =  Get-ChildItem $root -Recurse -exclude "**\pkgobj\*"

No entanto, $allItems ainda contém arquivos e pastas correspondentes aos caminhos.

O que fiz de errado?

Para ser mais preciso, quero obter pastas e arquivos, mas não a pasta especificada e qualquer um dos seus descendentes.

Eu também tentei:

foreach($item in $allItems){
    if($item.FullName -notmatch "pkgobj") {
        Write-Host -ForegroundColor Green $item.FullName.Replace($root,'')

    }
}

Mas não mais sucesso

    
por Steve B 21.10.2013 / 16:48

1 resposta

33

Demorei um momento para entender o problema. É um truque.

-exclude aplica-se apenas aos nomes de itens básicos (por exemplo, myfile.txt ), não ao nome completo dos itens (ou seja, C:\pkgobj\myfile.txt ) que você deseja. Então você não pode usar excluir aqui.

Mas há uma solução alternativa usando Fullname e -notlike

$root = "C:\Projects\MyProject"
$allitems = Get-ChildItem $root -Recurse | Where {$_.FullName -notlike "*\pkgobj\*"} 
    
por 21.10.2013 / 18:14

Tags