it-swarm.com.de

Ein Verzeichnismuster kann nicht rekursiv ausgeschlossen werden

Ich versuche rekursiv, untergeordnete Elemente eines Ordners abzurufen. Der Ordner enthält jedoch Rauschdateien und -ordner (tatsächlich handelt es sich um einen Visual Studio-Projektordner).

Hier was ich habe:

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

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

$allItems enthält jedoch weiterhin Dateien und Ordner, die mit den Pfaden übereinstimmen.

Was habe ich falsch gemacht?

Um genauer zu sein, möchte ich sowohl Ordner als auch Dateien abrufen, aber nicht den angegebenen Ordner und einen seiner Nachkommen.

Ich habe auch versucht:

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

    }
}

Aber kein Erfolg mehr

27
Steve B

Ich brauchte einen Moment, um das Problem zu verstehen. Es ist eine schwierige Frage.

-exclude gilt nur für Basisnamen von Elementen (d. h. myfile.txt), nicht für den vollständigen Namen
(d. h. C:\pkgobj\myfile.txt), die Sie möchten. Sie können hier also nicht ausschließen .

Es gibt jedoch eine Problemumgehung mit Fullname und -notlike

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