2013-02-05 6 views
41

Tôi đang cố gắng viết một tập lệnh PowerShell rất đơn giản để cung cấp cho tôi tổng số mục (cả tệp và thư mục) trong một thư mục nhất định (c:\MyFolder). Đây là những gì tôi đã thực hiện:Đếm các mục trong thư mục bằng PowerShell

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

Vấn đề là, rằng nếu tôi có 1 hoặc 0 sản phẩm, lệnh không hoạt động --- nó sẽ trả về không có gì.

Bất kỳ ý tưởng nào?

Trả lời

68

Bạn nên sử dụng Measure-Object để đếm mọi thứ. Trong trường hợp này nó sẽ như thế nào:

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

hoặc nếu đó là quá dài

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

và trong PowerShell 4.0 sử dụng measure bí danh thay vì mo

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

@Stanley_de_boer Cách của bạn tốt hơn ... cảm ơn! – HydroPowerDeveloper

18

cuối cùng tôi đã tìm thấy liên kết này:

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

Vâng, nó quay ra rằng đây là một điều không minh bạch gây ra một cách chính xác bởi vì có là chỉ có một tập tin trong thư mục. Một số tìm kiếm tiết lộ rằng trong trường hợp này, PowerShell trả về một đối tượng vô hướng thay vì một mảng. Đối tượng này không có thuộc tính đếm, vì vậy không có bất kỳ điều gì để truy cập .

Giải pháp - lực lượng PowerShell để trả lại một mảng với biểu tượng @:

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

Perfect, cảm ơn. Tôi thấy nó khó chịu khi các lệnh chạy thử và trở nên "hữu ích" và thay đổi kiểu trả về của chúng. –

16

Nếu bạn cần để tăng tốc độ lên quá trình (ví dụ như đếm 30k hoặc nhiều tập tin hơn) sau đó tôi sẽ đi với một cái gì đó như thế này ..

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

Đó là thứ tự cường độ nhanh hơn! Cảm ơn. Tôi đã có một thư mục với hơn 29K tập tin trong đó, và phương pháp này trả lại số lượng nhanh như ngón tay của tôi nâng lên từ phím RETURN. – xizdaqrian

4

Chỉ tập tin

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

Chỉ Folders

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

Cả

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

Trên trang đầu tiên, tôi sẽ tìm kiếm tất cả các tệp jpg và png như thế nào? –

+2

@AlLelopath '' Get-ChildItem D: \ -Recurse -File -Include * .jpg, *. Png | Đo đối tượng | % {$ _. Count} '' –

1

đệ quy đếm tập tin trong thư mục trong PowerShell 2.0

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

Trong quyền hạn bạn có thể sử dụng lệnh cắt, để tìm kiếm lệnh này có chữ số: Get-Alias;

Vì vậy, các cammands hộp để sử dụng là:

write-host (ls MydirectoryName).Count 

hoặc

write-host (dir MydirectoryName).Count 

hoặc

write-host (Get-ChildrenItem MydirectoryName).Count