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.
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.
J'utilise ceci pour lister les fichiers sous une racine mais ne pas inclure les répertoires
$files = gci 'C:\' -Recurse | Where-Object{!($_.PSIsContainer)}
Get-ChildItem -Path $SourcePath -File -Recurse |
Where-Object { !($_.FullName).StartsWith($DestinationPath) }