86 votes

Test Powershell si le dossier est vide

En Powershell, comment puis-je tester si un répertoire est vide ?

1voto

Maciej Points 11

Exemple de suppression d'un dossier vide :

IF ((Get-ChildItem "$env:SystemDrive\test" | Measure-Object).Count -eq 0) {
    remove-Item "$env:SystemDrive\test" -force
}

1voto

Yash Points 11
    $contents = Get-ChildItem -Path "C:\New folder"
    if($contents.length -eq "") #If the folder is empty, Get-ChileItem returns empty string
    {
        Remove-Item "C:\New folder"
        echo "Empty folder. Deleted folder"
    }
    else{
    echo "Folder not empty"
    }

1voto

Martureo Martus Points 11
#Define Folder Path to assess and delete
$Folder = "C:\Temp\Stuff"

#Delete All Empty Subfolders in a Parent Folder
Get-ChildItem -Path $Folder -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

#Delete Parent Folder if empty
If((Get-ChildItem -Path $Folder -force | Select-Object -First 1 | Measure-Object).Count -eq 0) {Remove-Item -Path $CATSFolder -Force -Recurse}

0voto

Michael Yuen Points 1

L'obtention d'un compte à partir de Get-ChildItem peut fournir des résultats erronés car un dossier vide ou une erreur d'accès à un dossier peut entraîner un compte nul.

La façon dont je vérifie les dossiers vides est de séparer les erreurs :

Try { # Test if folder can be scanned
   $TestPath = Get-ChildItem $Path -ErrorAction SilentlyContinue -ErrorVariable MsgErrTest -Force | Select-Object -First 1
}
Catch {}
If ($MsgErrTest) { "Error accessing folder" }
Else { # Folder can be accessed or is empty
   "Folder can be accessed"
   If ([string]::IsNullOrEmpty($TestPath)) { # Folder is empty
   "   Folder is empty"
   }
}

Le code ci-dessus essaie d'abord d'accéder au dossier. Si une erreur se produit, il indique qu'une erreur s'est produite. S'il n'y a pas d'erreur, il indique que "Le dossier est accessible", et vérifie ensuite s'il est vide.

0voto

Kjartan Points 5805

Après avoir examiné certaines des réponses existantes et expérimenté un peu, j'ai fini par utiliser cette approche :

function Test-Dir-Valid-Empty {
    param([string]$dir)
    (Test-Path ($dir)) -AND ((Get-ChildItem -att d,h,a $dir).count -eq 0)
}

Cela permettra vérifiez d'abord si le répertoire est valide ( Test-Path ($dir) ). Il vérifiera ensuite tout contenu, y compris les répertoires, les fichiers cachés ou les fichiers "normaux "**, grâce aux attributs suivants d , h y a respectivement.

L'utilisation doit être suffisamment claire :

PS C_\> Test-Dir-Valid-Empty projects\some-folder
False 

...ou alternativement :

PS C:\> if(Test-Dir-Valid-Empty projects\some-folder){ "empty!" } else { "Not Empty." }
Not Empty.

** En fait, je ne suis pas sûr à 100% de ce que l'effet défini de de a est ici, mais elle provoque dans tous les cas l'inclusion de tous les fichiers. La documentation indique que ah montre les fichiers cachés, et je crois as devrait montrer les fichiers système, donc je suppose que a n'affiche que les fichiers "normaux". Si vous le supprimez de la fonction ci-dessus, elle trouvera dans tous les cas les fichiers cachés, mais pas les autres.

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