PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Comment lister les dossiers vides en PowerShell ?

lundi 12 octobre 2020 à 09:00

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é 😉

The post Comment lister les dossiers vides en PowerShell ? first appeared on IT-Connect.