115 votes

Powershell : Compter les éléments dans un dossier avec PowerShell

J'essaie d'écrire un script PowerShell très simple pour me donner le nombre total d'éléments (à la fois fichiers et dossiers) dans un dossier donné ( ). c:\MyFolder ). Voici ce que j'ai fait :

Write-Host ( Get-ChildItem c:\MyFolder ).Count;

Le problème est que si j'ai 1 ou 0 article, la commande ne fonctionne pas - elle ne renvoie rien.

Des idées ?

185voto

Stanley De Boer Points 4321

Vous devez utiliser Measure-Object pour compter les choses. Dans ce cas, ça donnerait quelque chose comme :

Write-Host ( Get-ChildItem c:\MyFolder | Measure-Object ).Count;

ou si c'est trop long

Write-Host ( dir c:\MyFolder | mo).Count;

et dans PowerShell 4.0, utilisez l'option measure au lieu de l'alias mo

Write-Host (dir c:\MyFolder | measure).Count;

42voto

J'ai finalement trouvé ce lien :

https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/

Eh bien, il s'avère qu'il s'agit d'une bizarrerie causée précisément par le fait qu'il y a un seul fichier dans le répertoire. Quelques recherches ont révélé que dans ce cas, PowerShell retourne un objet scalaire au lieu d'un tableau. Cet objet n'a pas de propriété count, donc il n'y a rien à récupérer. récupérer.

La solution : obliger PowerShell à renvoyer un tableau avec l'élément @ symbole :

Write-Host @( Get-ChildItem c:\MyFolder ).Count;

40voto

dariusw Points 401

Si vous avez besoin d'accélérer le processus (par exemple en comptant 30k ou plus de fichiers), je choisirais quelque chose comme ceci

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count

17voto

user1776231 Points 475

Seulement les fichiers

Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count}

Dossiers uniquement

Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count}

Les deux sites

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}

4voto

Daniel Rodas Points 21

Vous pouvez également utiliser un alias

(ls).Count

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