Tidak dapat mengecualikan pola direktori secara rekursif


30

Saya mencoba mendapatkan item anak dari folder secara rekursif. Namun folder tersebut berisi file noise dan folder (sebenarnya, ini adalah folder proyek Visual Studio).

Di sini apa yang saya miliki:

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

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

Namun, $allItemsmasih berisi file dan folder yang cocok dengan jalurnya.

Apa yang saya lakukan salah?

Untuk lebih tepatnya, saya ingin mendapatkan folder dan file, tetapi bukan folder yang ditentukan, dan salah satu turunannya.

Saya juga mencoba:

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

    }
}

Tetapi tidak ada lagi kesuksesan

Jawaban:


44

Butuh waktu sejenak untuk memahami masalah ini. Yang rumit.

-excludehanya berlaku untuk nama dasar item (yaitu myfile.txt), bukan nama lengkap
(yaitu C:\pkgobj\myfile.txt) yang Anda inginkan. Jadi Anda tidak dapat menggunakan kecualikan di sini.

Tetapi ada solusi menggunakan Fullnamedan-notlike

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

1
Namun, jika Anda ingin mengecualikan direktori besar karena kinerja (seperti node_modules), ini tidak akan membantu karena masih akan memeriksa semuanya secara rekursif dan memfilter setelahnya.
Pluc

Bagaimana dengan ini ? Dapatkan-ChildItem -Kecualikan exclude_dir | foreach {Get-ChildItem -Path $ _ -Include * .include -Recurse -Exclude * .excludefile | foreach {echo $ _}}
NN_
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.