Đếm các mục trong một thư mục bằng PowerShell


92

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 đã làm:

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

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

Có ý kiến ​​gì không?

Câu trả lời:


151

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

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

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

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

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

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

Làm thế nào để có được số lượng cho tất cả các thư mục bên trong một thư mục cụ thể?
Mihir

38

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

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

Chà, hóa ra đây là một lỗi gây ra chính xác bởi vì chỉ có một tệp 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 count, vì vậy không có gì để truy xuất.

Giải pháp - buộc PowerShell trả về một mảng có @ký hiệu:

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

5
Hoàn hảo, cảm ơn. Tôi thấy khó chịu khi các commandlet cố gắng tỏ ra "hữu ích" và thay đổi kiểu trả về của chúng.
Paul Suart

35

Nếu bạn cần tăng tốc quá trình (ví dụ: đếm 30k tệp trở lên) thì tôi sẽ làm 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

Đó là một 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 trong đó và phương pháp này trả về số lượng nhanh như ngón tay tôi nhấc khỏi phím RETURN.
xizdaqrian

2
Bạn có thể lặp lại điều này với [System.IO.Directory]::GetFiles("$filepath", "$filetype",1)Xem tại đây
Cody G

14

Chỉ tệp

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

Chỉ các thư mục

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

Cả hai

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

2
Trong lần đầu tiên, làm cách nào để tìm kiếm tất cả các tệp jpg và png?
Al Lelopath

4
@AlLelopathGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
dhcgn

hi @dhcgn lời khuyên nào về vấn đề này stackoverflow.com/questions/54916917/...
rickyProgrammer

1

Đếm đệ quy các tệp trong thư mục trong PowerShell 2.0

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

1

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

Vì vậy, cammands có thể sử dụng là:

write-host (ls MydirectoryName).Count

hoặc là

write-host (dir MydirectoryName).Count

hoặc là

write-host (Get-ChildrenItem MydirectoryName).Count

0

Để đếm số loại tệp cụ thể trong một thư mục. Ví dụ là đếm các tệp mp3 trên ổ F:.

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

Đã thử nghiệm trong 6.2.3, nhưng sẽ hoạt động> 4.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.