301 votes

Comment obtenir uniquement les répertoires en utilisant Get-ChildItem ?

J'utilise PowerShell 2.0 et je veux extraire tous les sous-répertoires d'un certain chemin. La commande suivante affiche tous les fichiers et répertoires, mais je n'arrive pas à trouver comment filtrer les fichiers.

Get-ChildItem c:\mypath -Recurse

J'ai essayé d'utiliser $_.Attributes pour obtenir les attributs mais ensuite je ne sais pas comment construire une instance littérale de System.IO.FileAttributes pour le comparer. Sur cmd.exe ce serait

dir /b /ad /s

373voto

xcud Points 6878

Pour PowerShell 3.0 et plus :

Get-ChildItem -Directory

Vous pouvez également utiliser les alias dir , ls et gci


Pour les versions de PowerShell inférieures à 3.0 :

Le site FileInfo retourné par Get-ChildItem a une propriété "base", PSIsContainer . Vous voulez sélectionner uniquement ces éléments.

Get-ChildItem -Recurse | ?{ $_.PSIsContainer }

Si vous voulez les noms bruts de chaîne des répertoires, vous pouvez faire

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName

25 votes

J'aimerais que ce soit alias "IsFolder".

8 votes

Xcud : Toutes les hiérarchies représentées par un PSDrive ne sont pas basées sur des dossiers.

11 votes

Le fossé sémantique entre "conteneur" et "dossier" n'est pas un fossé que l'on peut franchir avec un camion.

213voto

iraSenthil Points 1966

Dans PowerShell 3.0, c'est plus simple :

Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files

35 votes

Dir est un alias de Get-ChildItem

1 votes

@crashmstr Vous êtes sûr ? J'ai vérifié sur ma PS4.0. Pour moi, dir a été aliasé en Get-ChildItem et le -Directory et -File Les options ont fonctionné comme décrit. J'ai utilisé les commandes echo $PSVersionTable , help dir , dir -Directory et dir -File pour en arriver à ce commentaire.

3 votes

Ceci devrait être la réponse

23voto

Carlos Nunez Points 489

Une approche plus propre :

Get-ChildItem "<name_of_directory>" | where {$_.Attributes -match'Directory'}

Je me demande si PowerShell 3.0 dispose d'un commutateur qui ne renvoie que les répertoires ; cela semble être une chose logique à ajouter.

3 votes

Pour info, powershell 3.0 ajoute la fonction -Directory et -File drapeaux

12voto

Marek Dzikiewicz Points 1447

Utilisez :

dir -r | where { $_ -is [System.IO.DirectoryInfo] }

7voto

Bill Points 91

À partir de PowerShell v2 et plus récent (k représente le dossier dans lequel vous commencez votre recherche) :

Get-ChildItem $Path -attributes D -Recurse

Si vous ne voulez que les noms de dossiers, et rien d'autre, utilisez ceci :

Get-ChildItem $Path -Name -attributes D -Recurse

Si vous recherchez un dossier spécifique, vous pouvez utiliser la méthode suivante. Dans ce cas, je recherche un dossier appelé myFolder :

Get-ChildItem $Path -attributes D -Recurse -include "myFolder"

0 votes

Et vous utilisez PS 3.0 ou 4.0 ?

5 votes

Le paramètre Attributs ne semble pas exister dans PS2, il donne une erreur "Impossible de trouver un paramètre correspondant au nom de paramètre 'Attributs'". Il fonctionne correctement sur PS3.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X