Essayer d'obtenir mon élément de copie pour copier tout dans le répertoire sauf un sous-dossier. J'ai pu exclure dans le dossier et les fichiers, mais pas dans les sous-dossiers.
J'ai essayé d'utiliser get-children et le -exclude dans l'élément de copie, mais je ne les ai pas exclus comme j'espère
$exclude = "folder\common" Get-ChildItem "c:\test" -Directory | Where-Object{$_.Name -notin $exclude} | Copy-Item -Destination 'C:\backup' -Recurse -Force
En espérant que le dossier commun existera mais rien ne serait une copie.
Merci pour l'aide
3 Réponses :
Voici un exemple:
$exclude= 'subfolderA' $path = 'c:\test' $fileslist = gci $path -Recurse foreach ($i in 0..$fileslist){ if( -not ($i.Fullname -like "*$($exlusion)*")){ copy-item -path $i.fullname -Destination 'C:\backup' -Force } }
Cela ne fonctionne pas pour les sous-dossiers, je souhaite exclure le dossierA \ subFolderA
Eh bien, il suffit de vérifier le dossier de tout pour le nom de fichier, mais le cas de bord peut survenir s'il doit être plus spécifique que
cela fonctionnerait pour tous les sous-dossiers des dossiers exclus car le «nom complet» contient le nom du dossier parent, donc l'exclusion.
Je pense que cela devrait faire ce dont vous avez besoin:
$sourceFolder = 'C:\test' $destination = 'C:\backup' $exclude = @("folder\common") # add more folders to exclude if you like # create a regex of the folders to exclude # each folder will be Regex Escaped and joined together with the OR symbol '|' $notThese = ($exclude | ForEach-Object { [Regex]::Escape($_) }) -join '|' Get-ChildItem -Path $sourceFolder -Recurse -File | Where-Object{ $_.DirectoryName -notmatch $notThese } | ForEach-Object { $target = Join-Path -Path $destination -ChildPath $_.DirectoryName.Substring($sourceFolder.Length) if (!(Test-Path -Path $target -PathType Container)) { New-Item -Path $target -ItemType Directory | Out-Null } $_ | Copy-Item -Destination $target -Force }
J'espère que cela vous aidera
Je suis passé à .Full Name à partir de .Directory Name. Pour certains cas où je voulais un nom de fichier spécifique mais un changement mineur
Vous avez dit que vous pouviez ajouter plus de dossiers à exclure, quelle serait la syntaxe pour cela?
@ Branderson20 Ajoutez simplement des noms de dossiers ou des morceaux de chemins de dossiers au tableau $ exclude
. Quelque chose comme $ exclude = "folder \ common", "folder \ notsocommon", "donttouchthisfolder"
Merci, c'était un autre problème mais l'a résolu, merci cependant
Je pense que l'utilisation du paramètre -exclude
sur Get-ChildItem
fonctionnerait:
$exclude = 'Exclude this folder','Exclude this folder 2','Folder3' Get-ChildItem -Path "Get these folders" -Exclude $exclude | Copy-Item -Destination "Send folders here"
{$ _. Name -notin $ exclude}
->{$ _. FullName -notmatch $ exclude}
J'ai essayé, mais cela n'a pas exclu le dossier commun
$ exclude
doit être échappé à l'expression régulière si vous utilisez la correspondance d'expression régulière (-match
ou-notmatch
).$ exclude = [regex] :: Échapper ("dossier \ commun")
ou échapper manuellement le \ avec \\.@AdminOfThings J'ai essayé les deux et il semble que cela n'a pas exclu le dossier
Si $ exclude = "dossier", ce serait beaucoup plus facile.
Le paramètre de profondeur peut vous aider