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 !" }
(Get-ChildItem C:\temp | Measure-Object).Count
if( (Get-ChildItem C:\temp | Measure-Object).Count -eq 0) { Write-Output "This folder is empty !" } else { Write-Output "This folder is not empty !" }
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 ?
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
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
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.