Copier des éléments en excluant un dossier dans PowerShell
-
Exclusion de dossiers dans les opérations de copie PowerShell en utilisant la fonction
Get-Item
et le paramètre-Exclude
-
Exclusion de dossiers dans les opérations de copie PowerShell en utilisant
Where-Object
etPSIsContainer
- Conclusion

Dans le domaine de la gestion des fichiers et de l’automatisation avec PowerShell, la tâche de copier des fichiers tout en excluant des dossiers spécifiques représente un défi courant mais nuancé. Cet article explore deux méthodes efficaces pour accomplir cette tâche : utiliser la fonction Get-Item
avec le paramètre -Exclude
et tirer parti de Where-Object
avec la propriété PSIsContainer
.
Les deux méthodes, bien qu’elles servent le même objectif, abordent le problème sous des angles différents et offrent des avantages uniques.
Notre objectif est de fournir une compréhension complète de ces méthodes, de leurs applications et des nuances de leur utilisation. Grâce à des explications détaillées, à des décompositions de syntaxe et à des exemples pratiques, nous visons à équiper à la fois les utilisateurs nouveaux et expérimentés de PowerShell des compétences nécessaires pour gérer efficacement les tâches de copie de fichiers, en personnalisant leurs approches pour s’adapter aux exigences spécifiques de leurs flux de travail.
Exclusion de dossiers dans les opérations de copie PowerShell en utilisant la fonction Get-Item
et le paramètre -Exclude
Nous pouvons utiliser la commande Copy-Item
pour copier les fichiers tout en excluant un dossier dans PowerShell. Il existe deux méthodes pour utiliser Copy-Item
tout en excluant un dossier, l’une consiste à exclure un seul dossier, et l’autre à exclure plusieurs dossiers.
La syntaxe pour cette opération combine Copy-Item
avec Get-Item -Exclude
:
Copy-Item -Path (Get-Item -Path "sourcePath\*" -Exclude ('folderToExclude')).FullName -Destination "destinationPath" -Recurse -Force
Paramètres :
Copy-Item
: Ce cmdlet copie des fichiers et des répertoires vers un nouvel emplacement.-Path
: Spécifie le chemin des éléments à copier. Dans notre cas, cela est fourni parGet-Item
.Get-Item
: Récupère les éléments de l’emplacement spécifié.-Exclude
: Ce paramètre deGet-Item
filtre les éléments, en particulier les noms de dossiers ou de fichiers à exclure.('folderToExclude')
: Le nom du dossier que vous souhaitez exclure..FullName
: Récupère le chemin complet des éléments.-Destination
: Le chemin pour copier les éléments.-Recurse
: Inclut le contenu des sous-répertoires.-Force
: Force la commande à s’exécuter sans demander de confirmation à l’utilisateur.
Exemple de code :
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder')).FullName -Destination "destination\" -Recurse -Force
Dans notre script, nous commençons par cibler le répertoire source (C:\origin\
) et employons Get-Item
pour récupérer tous les éléments qu’il contient. L’utilisation du symbole astérisque (*
) ici agit comme un caractère générique, représentant chaque élément dans le répertoire.
Nous utilisons ensuite le paramètre -Exclude
pour exprimer notre intention d’exclure un sous-dossier spécifique, particulièrement nommé SubFolder
. L’utilisation de la propriété .FullName
est cruciale dans ce contexte car elle récupère le chemin complet de chaque élément avec lequel nous travaillons.
Après avoir curé cette liste, qui omet le dossier désigné, elle est remise à Copy-Item
. Nous définissons notre emplacement cible comme le répertoire de destination (C:\destination
). Pour assurer un processus de copie complet, englobant tous les sous-répertoires à l’exception de celui que nous avons choisi d’exclure, nous intégrons le paramètre -Recurse
.
Pour faciliter davantage notre processus et éviter les interruptions potentielles, le paramètre -Force
entre en jeu. Il supprime efficacement toute invite système qui pourrait autrement interrompre l’opération, particulièrement celles associées à l’écrasement de fichiers existants dans le répertoire de destination.
Dossier origin
:
Sortie :
La commande ci-dessus n’exclura qu’un seul dossier donné. Nous pouvons également exclure plusieurs dossiers en mettant simplement les noms de plusieurs dossiers dans -Exclude()
.
Voir la commande pour exclure plusieurs dossiers :
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force
Voir la sortie :
Exclusion de dossiers dans les opérations de copie PowerShell en utilisant Where-Object
et PSIsContainer
PowerShell fournit un ensemble étendu de cmdlets pour la manipulation de fichiers et de dossiers, avec Copy-Item
étant un acteur clé pour les opérations de copie. Cependant, sa fonctionnalité native ne prend pas directement en charge l’exclusion de dossiers.
Pour y parvenir, nous employons une combinaison de Get-ChildItem
, Where-Object
et la propriété PSIsContainer
. Cette méthode est particulièrement utile pour les opérations de copie où vous devez exclure des répertoires tout en préservant les fichiers.
La structure du script est la suivante :
Get-ChildItem -Path "sourcePath\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destinationPath" -Recurse -Container
Paramètres :
Get-ChildItem -Path "sourcePath\" -Recurse
: Récupère tous les éléments (fichiers et dossiers) depuis le chemin spécifié, y compris les sous-répertoires.Where-Object { $_.PSIsContainer -notmatch 'True' }
: Filtre tous les répertoires.PSIsContainer
est une propriété booléenne qui estTrue
pour les répertoires etFalse
pour les fichiers.Copy-Item -Destination "destinationPath" -Recurse -Container
: Copie les éléments restants (fichiers) vers la destination.-Recurse
est utilisé pour assurer la traversée des sous-répertoires, et-Container
préserve la structure des répertoires.
Exemple de code :
Get-ChildItem -Path "origin\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destination\" -Recurse -Container
Dans notre script, nous commençons par rassembler tous les éléments du répertoire source (origin\
). Pour ce faire, nous employons le cmdlet Get-ChildItem
.
La véritable magie opère avec le cmdlet Where-Object
, où nous introduisons un filtre pour exclure spécifiquement les répertoires. Cette exclusion repose sur la condition $_ .PSIsContainer -notmatch 'True'
.
Ce morceau de code est crucial car il permet de trier les éléments rassemblés, garantissant que seuls les fichiers (et non les dossiers) sont transmis à la chaîne de traitement.
Ensuite, ces fichiers filtrés sont remis au cmdlet Copy-Item
. Notre commande ici est de copier ces fichiers vers notre destination spécifiée (destination\
).
Un aspect important de cette opération est la manière dont elle préserve la structure de répertoire originale dans la destination malgré l’exclusion des dossiers eux-mêmes. Cet équilibre est atteint grâce à l’orchestration minutieuse des paramètres -Recurse
et -Container
au sein de Copy-Item
, garantissant que l’intégrité de la structure de fichiers est maintenue, à l’exception des dossiers réels.
Sortie :
Conclusion
En conclusion, les techniques présentées dans cet article — utilisant Get-Item
avec -Exclude
et Where-Object
avec PSIsContainer
— offrent des moyens puissants et flexibles d’exclure des dossiers durant les opérations de copie PowerShell. En comprenant et en appliquant ces méthodes, les utilisateurs peuvent considérablement améliorer leurs capacités de gestion des fichiers et d’automatisation dans PowerShell.
L’approche Get-Item
et -Exclude
est simple et très efficace pour exclure des dossiers spécifiques, tandis que les méthodes Where-Object
et PSIsContainer
offrent un contrôle plus nuancé, particulièrement utile dans des scénarios où les critères d’exclusion sont plus complexes ou dynamiques. Les deux méthodes démontrent la polyvalence et la puissance de PowerShell dans le traitement des fichiers et des dossiers, en faisant un outil inestimable pour les administrateurs système, les développeurs et les professionnels de l’informatique.
Armés de ces connaissances, les utilisateurs peuvent s’attaquer en toute confiance à une large gamme de tâches de copie de fichiers, assurant un contrôle efficace et précis sur leurs opérations de gestion de fichiers dans des environnements Windows.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook