Policz elementy w folderze za pomocą programu PowerShell

92

Próbuję napisać bardzo prosty skrypt PowerShell, który da mi całkowitą liczbę elementów (zarówno plików, jak i folderów) w danym folderze ( c:\MyFolder). Oto, co zrobiłem:

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

Problem w tym, że jeśli mam 1 lub 0 pozycji to polecenie nie działa --- nic nie zwraca.

Jakieś pomysły?

HydroPowerDeveloper
źródło

Odpowiedzi:

151

Powinieneś używać Measure-Objectdo liczenia rzeczy. W tym przypadku wyglądałoby to tak:

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

lub jeśli to za długo

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

aw programie PowerShell 4.0 użyj measurealiasu zamiastmo

Write-Host (dir c:\MyFolder | measure).Count;
Stanley De Boer
źródło
Jak uzyskać liczbę wszystkich folderów w określonym folderze?
Mihir
38

W końcu znalazłem ten link:

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

Okazuje się, że jest to dziwactwo spowodowane właśnie tym, że w katalogu był tylko jeden plik. Niektóre wyszukiwania ujawniły, że w tym przypadku PowerShell zwraca obiekt skalarny zamiast tablicy. Ten obiekt nie ma właściwości count, więc nie ma nic do pobrania.

Rozwiązanie - wymuś PowerShell, aby zwrócił tablicę z @symbolem:

Write-Host @( Get-ChildItem c:\MyFolder ).Count;
HydroPowerDeveloper
źródło
5
Perfekcyjnie, dzięki. Uważam to za irytujące, gdy komendy starają się być „pomocne” i zmieniają sposób zwracania.
Paul Suart,
35

Jeśli chcesz przyspieszyć proces (na przykład liczenie 30k lub więcej plików), to wybrałbym coś takiego ...

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
dariusw
źródło
To jest o rząd wielkości szybciej! Dzięki. Miałem folder z ponad 29K plików, a ta metoda zwracała wynik tak szybko, jak mój palec podniósł się z klawisza RETURN.
xizdaqrian
2
Możesz powtórzyć to z [System.IO.Directory]::GetFiles("$filepath", "$filetype",1)See here
Cody G
14

Tylko pliki

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

Tylko foldery

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

Obie

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
dhcgn
źródło
2
Na pierwszym z nich, jak miałbym wyszukać wszystkie pliki jpg i png?
Al Lelopath
4
@AlLelopathGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
dhcgn
cześć @dhcgn, wszelkie porady dotyczące tego stackoverflow.com/questions/54916917/ ...
rickyProgrammer
1

Rekurencyjne zliczanie plików w katalogach w programie PowerShell 2,0

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

W PowerShell można użyć komendy severals, do poszukiwania tego polecenia cyfrę: Get-Alias;

Więc puszki, których można użyć, to:

write-host (ls MydirectoryName).Count

lub

write-host (dir MydirectoryName).Count

lub

write-host (Get-ChildrenItem MydirectoryName).Count
Fábio Rodrigues Fonseca
źródło
0

Aby policzyć liczbę plików określonego typu w folderze. Przykładem jest zliczanie plików mp3 na dysku F :.

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

Testowane w 6.2.3, ale powinno działać> 4.

OrigamiEye
źródło