Contar itens em uma pasta com PowerShell

91

Estou tentando escrever um script PowerShell muito simples para me dar o número total de itens (arquivos e pastas) em uma determinada pasta ( c:\MyFolder). Aqui está o que fiz:

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

O problema é que, se eu tiver 1 ou 0 itens, o comando não funciona - ele não retorna nada.

Alguma ideia?

HydroPowerDeveloper
fonte

Respostas:

148

Você deve usar Measure-Objectpara contar coisas. Nesse caso, seria semelhante a:

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

ou se for muito longo

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

e no PowerShell 4.0 use o measurealias em vez demo

Write-Host (dir c:\MyFolder | measure).Count;
Stanley De Boer
fonte
Como obter a contagem de todas as pastas dentro de uma pasta específica?
Mihir de
37

Finalmente encontrei este link:

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

Bem, acontece que esta é uma peculiaridade causada precisamente porque havia apenas um arquivo no diretório. Algumas pesquisas revelaram que, neste caso, o PowerShell retorna um objeto escalar em vez de uma matriz. Este objeto não possui uma propriedade count, então não há nada para recuperar.

A solução - force o PowerShell a retornar uma matriz com o @símbolo:

Write-Host @( Get-ChildItem c:\MyFolder ).Count;
HydroPowerDeveloper
fonte
5
Perfeito, obrigado. Acho irritante quando os commandlets tentam ser "úteis" e variam seu tipo de retorno.
Paul Suart
34

Se você precisar acelerar o processo (por exemplo, contando 30k ou mais arquivos), eu faria algo assim ..

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
Dariusw
fonte
Isso é uma ordem de magnitude mais rápido! Obrigado. Eu tinha uma pasta com mais de 29 mil arquivos e esse método retornou a contagem tão rápido quanto meu dedo levantou da tecla RETURN.
xizdaqrian
1
Você pode recursar isso com [System.IO.Directory]::GetFiles("$filepath", "$filetype",1)Veja aqui
Cody G
14

Apenas arquivos

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

Apenas Pastas

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

Ambos

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
dhcgn
fonte
2
No primeiro, como eu pesquisaria todos os arquivos jpg e png?
Al Lelopath de
4
@AlLelopathGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
dhcgn
olá @dhcgn algum conselho neste stackoverflow.com/questions/54916917/…
rickyProgrammer
1

Contar recursivamente arquivos em diretórios no PowerShell 2.0

ls -rec | ? {$_.mode -match 'd'} | select FullName,  @{N='Count';E={(ls $_.FullName | measure).Count}}
Valeriy Glushenkov
fonte
1

No PowerShell você pode usar vários comandos, para procurar por estes comandos digit Get-Alias:;

Portanto, os comandos que podem ser usados ​​são:

write-host (ls MydirectoryName).Count

ou

write-host (dir MydirectoryName).Count

ou

write-host (Get-ChildrenItem MydirectoryName).Count
Fábio Rodrigues Fonseca
fonte
0

Para contar o número de um tipo de arquivo específico em uma pasta. O exemplo é contar arquivos mp3 na unidade F :.

( Get-ChildItme F: -Filter *.mp3 - Recurse | measure ).Count

Testado em 6.2.3, mas deve funcionar> 4.

OrigamiEye
fonte