web-dev-qa-db-fra.com

Impossible d'exclure le répertoire à l'aide du paramètre Get-ChildItem -Exclude dans Powershell

J'utilise Powershell v 2.0. et copier des fichiers et des répertoires d'un emplacement à un autre. J'utilise une chaîne [] pour filtrer les types de fichiers et j'ai également besoin de filtrer un répertoire contre la copie. Les fichiers sont filtrés correctement, cependant, le répertoire que j'essaye de filtrer obj continue d'être copié.

$exclude = @('*.cs', '*.csproj', '*.pdb', 'obj')
    $items = Get-ChildItem $parentPath -Recurse -Exclude $exclude
    foreach($item in $items)
    {
        $target = Join-Path $destinationPath $item.FullName.Substring($parentPath.length)
        if( -not( $item.PSIsContainer -and (Test-Path($target))))
        {
            Copy-Item -Path $item.FullName -Destination $target
        }
    }

J'ai essayé différentes manières de le filtrer, \obj ou *obj* ou \obj\ mais rien ne semble fonctionner.

Merci pour toute aide.

24
Flea

Le paramètre -Exclude Est assez cassé. Je vous recommande de filtrer les répertoires que vous ne voulez pas utiliser Where-Object (?{}). Par exemple:

$exclude = @('*.cs', '*.csproj', '*.pdb')
$items = Get-ChildItem $parentPath -Recurse -Exclude $exclude | ?{ $_.fullname -notmatch "\\obj\\?" }

P.S .: Avertissement: ne pensez même pas à utiliser -Exclude Sur Copy-Item Lui-même.

55
manojlds

J'utilise ceci pour lister les fichiers sous une racine mais ne pas inclure les répertoires

$files = gci 'C:\' -Recurse  | Where-Object{!($_.PSIsContainer)}
7
Stuzc
Get-ChildItem -Path $SourcePath -File -Recurse | 
Where-Object { !($_.FullName).StartsWith($DestinationPath) } 
5
Bjorn Mistiaen