PowerShell वाले फ़ोल्डर में आइटम की गणना करें


91

मैं एक बहुत ही सरल PowerShell स्क्रिप्ट लिखने की कोशिश कर रहा हूं ताकि मुझे दिए गए फ़ोल्डर ( c:\MyFolder) में आइटमों की कुल संख्या (दोनों फाइलें और फ़ोल्डर्स) मिलें । यहाँ मैंने क्या किया है:

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

समस्या यह है कि अगर मेरे पास 1 या 0 आइटम हैं, तो कमांड काम नहीं करता है --- यह कुछ भी नहीं लौटाता है।

कोई विचार?

जवाबों:


149

आपको 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;

किसी विशेष फ़ोल्डर के अंदर सभी फ़ोल्डरों की गणना कैसे करें?
मिहिर

37

मुझे अंत में यह लिंक मिला:

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

ठीक है, यह पता चला है कि यह ठीक एक क्विक है, क्योंकि निर्देशिका में केवल एक फ़ाइल थी। कुछ खोज से पता चला कि इस मामले में, PowerShell एक सरणी के बजाय एक स्केलर ऑब्जेक्ट देता है। इस ऑब्जेक्ट में कोई गणना गुण नहीं है, इसलिए पुनर्प्राप्त करने के लिए कुछ भी नहीं है।

समाधान - @प्रतीक के साथ एक सरणी वापस करने के लिए PowerShell को बाध्य करें :

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

5
बहुत बहुत धन्यवाद। जब कमांडलेट कोशिश करते हैं और "सहायक" होते हैं तो मुझे यह कष्टप्रद लगता है और उनकी वापसी का प्रकार भिन्न होता है।
पॉल सार्ट

35

यदि आपको प्रक्रिया को गति देने की आवश्यकता है (उदाहरण के लिए 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) देखें
कोडी '

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 फ़ाइलों की खोज कैसे करूँगा?
अल लेलोपथ

4
@ एएललोपोपैथGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
dhcgn



1

शक्तियां में आप इस कमांड अंक की तलाश में, गंभीर कमांड्स का उपयोग कर सकते हैं Get-Alias:;

तो उपयोग करने के लिए कैममैंड्स हैं:

write-host (ls MydirectoryName).Count

या

write-host (dir MydirectoryName).Count

या

write-host (Get-ChildrenItem MydirectoryName).Count

0

किसी फ़ोल्डर में एक विशिष्ट फ़िलेटाइप की संख्या की गणना करने के लिए। इसका उदाहरण एफ: ड्राइव पर एमपी 3 फाइलों को गिनना है।

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

6.2.3 में परीक्षण किया गया, लेकिन काम करना चाहिए> 4।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.