Comment vérifier si un dossier est vide en PowerShell ?

I. Présentation

Nous allons voir dans ce tutoriel une astuce PowerShell, qui pourrait s'avérer très pratique dans vos scripts, notamment pour manipuler des données. En fait, nous allons voir comment checker si un dossier est vide en Powershell.

Avec le cmdlet Test-Path, on peut facilement tester la présence ou non d'un dossier, mais ceci ne permets pas de savoir s'il est vide ou non.

Voyons comment procéder.

II. Get-ChildItem et Count

Je vais vous proposer deux méthodes pour réussir à savoir si un dossier est vide, elle s'appuie toutes les deux sur la commande "Get-ChildItem". On prendra comme dossier cible "c:\temp" et je vous invite à tester le bout de code dans différents cas de figure si vous souhaitez vérifier que ça fonctionne : le dossier avec des fichiers, le dossier vide.

Ouvrez une console PowerShell, et saisissez la commande suivante :

(Get-ChildItem C:\temp).Count

Le nombre de fichiers et dossiers sera retourné ! Par contre attention, cette commande ne compte pas le nombre d'éléments de manière récursive c'est-à-dire les éléments des sous-dossiers. En fait, ce n'est pas trop gênant puisque l'on cherche juste à savoir si le dossier est vide, et non le nombre précis d'éléments.

Pour ceux que ça intéresse, voici la commande avec récursivité :

(Get-ChildItem C:\temp -Recurse).Count

Dans les deux cas, pour obtenir le nombre d'éléments, on va utiliser la propriété "Count" qui va tout simplement retourner le nombre d'éléments dans l'objet retourné.

Il ne reste plus qu'à inclure cela dans un bloc conditionnel, où si count est égal à 0 alors le dossier est vide, sinon il ne l'est pas.

Ce qui nous donne :

if( (Get-ChildItem C:\temp).Count -eq 0) {
   Write-Output "This folder is empty !"
} else {
   Write-Output "This folder is not empty !"
}
Maintenant, on va pouvoir évoquer une méthode alternative, où l'on va s'appuyer sur le cmdlet "Measure-Object". L'avantage c'est qu'il peut être utilisé pour mesurer des objets de différents types, voici la description du cmdlet sur la documentation de Microsoft : "Calculates the numeric properties of objects, and the characters, words, and lines in string objects, such as files of text."
On va donc utiliser la commande suivante :
(Get-ChildItem C:\temp | Measure-Object).Count
Cette fois-ci, on utilise la propriété "Count" du cmdlet Measure-Object. Dans tous les cas, la valeur retournée par count sera identique dans les deux méthodes que l'on vient d'évoquer.
Si l'on insère cette commande dans un bloc conditionnel if-else, cela nous donne :
if( (Get-ChildItem C:\temp | Measure-Object).Count -eq 0) {
   Write-Output "This folder is empty !"
} else {
   Write-Output "This folder is not empty !"
}
Voilà, dans vos scripts vous êtes désormais en mesure de vérifier si un dossier est vide ou non, le tout en PowerShell !
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

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.

Nombre de posts de cet auteur : 5499.Voir tous les posts

4 thoughts on “Comment vérifier si un dossier est vide en PowerShell ?

  • Sympa, y aurait-il un script qui puisse permette de faire des copier-coller en même temps, et non que ça copie un par un en fille d’attente ?

    Répondre
  • Salut,

    en vrai, ça marche sans utiliser le .Count ou le Measure-Object

    if(Get-ChildItem C:\temp\empty\) {« plein »} else {« vide »}

    En fait, s’il n’y a rien, il renvoie un « false ».

    Cordialement

    Répondre
    • Bonsoir C-Bam,

      C’est effectivement une façon de faire, c’est tout l’intérêt de PowerShell (et d’autres langages) où il y a bien souvent plusieurs méthodes 🙂
      Merci pour ta participation.

      Florian

      Répondre
  • Bonjour,

    On peut aussi spécifier: « -Attributes !Directory » Pour ne tester que la présence de fichiers (ignore les sous dossiers)

    if(Get-ChildItem C:\temp\empty\ -Attributes !Directory) {« plein »} else {« vide »}

    Cordialement.
    Erwann.

    Répondre

Répondre à Florian Burnel Annuler la réponse

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.