Không thể loại trừ một mẫu thư mục theo cách đệ quy


30

Tôi đang cố gắng để có được các mục con của một thư mục theo cách đệ quy. Tuy nhiên, thư mục chứa các tệp và thư mục nhiễu (thực ra, đây là thư mục dự án Visual Studio).

Đây là những gì tôi có:

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

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

Tuy nhiên, $allItemsvẫn chứa các tập tin và thư mục phù hợp với các đường dẫn.

Tôi đã làm sai điều gì?

Nói chính xác hơn, tôi muốn lấy cả thư mục và tệp, nhưng không phải thư mục được chỉ định và bất kỳ hậu duệ nào của nó.

Tôi cũng đã thử:

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

    }
}

Nhưng không thành công hơn

Câu trả lời:


44

Mất một lúc để hiểu vấn đề. Đó là một khó khăn.

-excludechỉ áp dụng cho tên cơ sở của các mục (tức là myfile.txt), không áp dụng tên đầy đủ
(tức là C:\pkgobj\myfile.txt) mà bạn muốn. Vì vậy, bạn không thể sử dụng loại trừ ở đây.

Nhưng có một cách giải quyết bằng cách sử dụng Fullname-notlike

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

1
Tuy nhiên, nếu bạn muốn loại trừ các thư mục lớn do hiệu suất (như node_modules), điều này sẽ không hữu ích vì nó vẫn sẽ kiểm tra đệ quy mọi thứ và lọc sau đó.
Pluc

Cái này thì sao ? Get-ChildItem -Exclude Elim_dir | foreach {Get-ChildItem -Path $ _ -Incoide * .include -Recurse -Exclude * .excludefile | foreach {echo $ _}}
NN_
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.