นับรายการในโฟลเดอร์ด้วย PowerShell


92

ฉันกำลังพยายามเขียนสคริปต์ PowerShell ที่เรียบง่ายเพื่อให้จำนวนรายการทั้งหมด (ทั้งไฟล์และโฟลเดอร์) ในโฟลเดอร์ที่กำหนด ( c:\MyFolder) นี่คือสิ่งที่ฉันทำ:

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

ปัญหาคือถ้าฉันมี 1 หรือ 0 รายการคำสั่งไม่ทำงาน --- มันจะไม่ส่งคืนอะไรเลย

ความคิดใด ๆ ?

คำตอบ:


151

คุณควรใช้Measure-Objectเพื่อนับสิ่งต่างๆ ในกรณีนี้จะมีลักษณะดังนี้:

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

หรือถ้ายาวเกินไป

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

และใน PowerShell 4.0 ให้ใช้measureนามแฝงแทนmo

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

จะนับโฟลเดอร์ทั้งหมดในโฟลเดอร์ใดโฟลเดอร์หนึ่งได้อย่างไร
Mihir

38

ในที่สุดฉันก็พบลิงค์นี้:

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

ปรากฎว่านี่เป็นความแปลกประหลาดที่เกิดขึ้นอย่างแม่นยำเนื่องจากมีเพียงไฟล์เดียวในไดเร็กทอรี การค้นหาบางอย่างพบว่าในกรณีนี้ PowerShell จะส่งคืนวัตถุสเกลาร์แทนอาร์เรย์ วัตถุนี้ไม่มีคุณสมบัติการนับดังนั้นจึงไม่มีสิ่งใดที่จะเรียกคืน

วิธีแก้ปัญหา - บังคับให้ PowerShell ส่งคืนอาร์เรย์ด้วย@สัญลักษณ์:

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

5
สมบูรณ์แบบขอบคุณ ฉันคิดว่ามันน่ารำคาญเมื่อ commandlets พยายามและเป็น "ประโยชน์" และเปลี่ยนประเภทการส่งคืน
Paul Suart

36

หากคุณต้องการเร่งกระบวนการ (เช่นการนับไฟล์ 30k ขึ้นไป) ฉันจะใช้สิ่งนี้ ..

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

นั่นคือลำดับความสำคัญเร็วขึ้น! ขอบคุณ. ฉันมีโฟลเดอร์ที่มีไฟล์มากกว่า 29K และวิธีนี้จะคืนค่าการนับให้เร็วที่สุดเท่าที่นิ้วของฉันยกออกจากแป้น RETURN
xizdaqrian

2
คุณสามารถเรียกคืนได้ด้วย[System.IO.Directory]::GetFiles("$filepath", "$filetype",1)See here
Cody G

14

เฉพาะไฟล์

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

โฟลเดอร์เท่านั้น

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

ทั้งสอง

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

2
อย่างแรกฉันจะค้นหาไฟล์ jpg และ png ทั้งหมดได้อย่างไร
Al Lelopath

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

สวัสดี @dhcgn คำแนะนำใด ๆ เกี่ยวกับstackoverflow.com/questions/54916917/…
rickyProgrammer


1

ใน powershell คุณสามารถใช้คำสั่งหลายคำสั่งเพื่อค้นหาคำสั่งนี้หลัก: Get-Alias;

ดังนั้น cammands ที่สามารถใช้ได้คือ:

write-host (ls MydirectoryName).Count

หรือ

write-host (dir MydirectoryName).Count

หรือ

write-host (Get-ChildrenItem MydirectoryName).Count

0

เพื่อนับจำนวนประเภทไฟล์เฉพาะในโฟลเดอร์ ตัวอย่างคือการนับไฟล์ mp3 บน F: drive

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

ทดสอบใน 6.2.3 แต่ควรใช้งานได้> 4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.