Hitung item dalam folder dengan PowerShell

92

Saya mencoba menulis skrip PowerShell yang sangat sederhana untuk memberi saya jumlah item (baik file dan folder) dalam folder tertentu ( c:\MyFolder). Inilah yang telah saya lakukan:

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

Masalahnya adalah, jika saya memiliki 1 atau 0 item, perintah tidak berfungsi --- ia tidak mengembalikan apa-apa.

Ada ide?

HydroPowerDeveloper
sumber

Jawaban:

151

Anda harus menggunakan Measure-Objectuntuk menghitung sesuatu. Dalam hal ini akan terlihat seperti:

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

atau jika itu terlalu lama

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

dan di PowerShell 4.0 gunakan measurealias sebagai gantimo

Write-Host (dir c:\MyFolder | measure).Count;
Stanley De Boer
sumber
Bagaimana cara menghitung semua folder di dalam folder tertentu?
Mihir
38

Saya akhirnya menemukan tautan ini:

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

Nah, ternyata ini adalah kekhasan yang disebabkan justru karena hanya ada satu file di direktori tersebut. Beberapa pencarian mengungkapkan bahwa dalam kasus ini, PowerShell mengembalikan objek skalar, bukan array. Objek ini tidak memiliki properti count, jadi tidak ada yang bisa diambil.

Solusinya - paksa PowerShell untuk mengembalikan array dengan @simbol:

Write-Host @( Get-ChildItem c:\MyFolder ).Count;
HydroPowerDeveloper
sumber
5
Sempurna, terima kasih. Saya merasa menjengkelkan ketika commandlet mencoba dan menjadi "membantu" dan memvariasikan jenis kembaliannya.
Paul Suart
35

Jika Anda perlu mempercepat proses (misalnya menghitung 30k atau lebih file) maka saya akan menggunakan sesuatu seperti ini ..

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
dariusw
sumber
Itu urutan besarnya lebih cepat! Terima kasih. Saya memiliki folder dengan lebih dari 29K file di dalamnya, dan metode ini mengembalikan hitungan secepat jari saya mengangkat dari tombol RETURN.
xizdaqrian
2
Anda dapat mengulangi ini dengan [System.IO.Directory]::GetFiles("$filepath", "$filetype",1)Lihat di sini
Cody G
14

Hanya File

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

Hanya Folder

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

Kedua

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
hdev
sumber
2
Yang pertama, bagaimana cara mencari semua file jpg dan png?
Al Lelopath
4
@AlLelopathGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
hdev
hai @dhcgn saran apapun tentang stackoverflow.com/questions/54916917/…
rickyProgrammer
1

Menghitung file secara berulang dalam direktori di PowerShell 2.0

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

Dalam Powershell Anda dapat menggunakan severals perintah, untuk mencari perintah digit ini: Get-Alias;

Jadi kap lampu yang bisa digunakan adalah:

write-host (ls MydirectoryName).Count

atau

write-host (dir MydirectoryName).Count

atau

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

Untuk menghitung jumlah jenis file tertentu dalam folder. Contohnya adalah menghitung file mp3 di F: drive.

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

Teruji di 6.2.3, tetapi harus bekerja> 4.

OrigamiEye
sumber