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?

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;

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;

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

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}

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}}

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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.