14/11/2024

PowerShell

Comment lister les dossiers vides en PowerShell ?

I. Présentation

Dans un précédent article, nous avions vu comment vérifier si un dossier est vide en PowerShell. Aujourd'hui, nous allons voir comment lister les dossiers vides en PowerShell. Imaginons prendre le dossier "C:\DATA" et demander à PowerShell de lister tous les dossiers vides sous cette racine, de façon récursive ou seulement les dossiers du premier niveau.

II. Lister les dossiers vides

Pour cet exemple, j'ai créé quelques dossiers au sein du dossier "DATA". Seul le dossier "Dossier4" est vide, les autres contiennent des fichiers et/ou des dossiers.

L'idée va être de lister les éléments du dossier "C:\DATA" avec la commande suivante :

Get-ChildItem "C:\DATA" -Directory

Nous allons ensuite ajouter deux filtres via Where-Object, grâce aux méthodes GetFiles() et GetDirectories(), qui permettent respectivement d'obtenir la liste des fichiers et la liste des dossiers. A chaque fois, nous allons vérifier si le nombre de fichiers et de fichiers est égal à zéro (grâce à Count) : si c'est le cas, le dossier est vide.

En guise de résultat, nous allons afficher le chemin complet vers le dossier grâce à la propriété FullName :

Get-ChildItem "C:\DATA" -Directory | Where-Object -FilterScript {($_.GetFiles().Count -eq 0) -and $_.GetDirectories().Count -eq 0} | Select-Object -ExpandProperty FullName

Ce qui donne :

Enfin, si l'on veut supprimer tous les dossiers vides, on ajoute "Remove-Item" à la fin de la commande :

Get-ChildItem "C:\DATA" -Directory | Where-Object -FilterScript {($_.GetFiles().Count -eq 0) -and $_.GetDirectories().Count -eq 0} | Select-Object -ExpandProperty FullName | Remove-Item

La commande que l'on a vue jusqu'ici permet de récupérer les dossiers vides de premier niveau. Si l'on veut ajouter la récursivité à cette recherche, on va simplement ajouter le paramètre -Recurse à la commande Get-ChildItem.

Ce qui donne :

Get-ChildItem "C:\DATA" -Directory -Recurse | Where-Object -FilterScript {($_.GetFiles().Count -eq 0) -and $_.GetDirectories().Count -eq 0} | Select-Object -ExpandProperty FullName

Il ne vous reste plus qu'à enregistrer cette commande dans un fichier PS1 nommé Get-EmptyFolders pour la garder de côté ?

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.