2013-02-05 15 views
41

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

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

समस्या है, कि अगर मैं 1 या 0 आइटम नहीं हैं, आदेश काम नहीं करता है ---: यहाँ मैं क्या किया है है।

कोई विचार?

उत्तर

68

आप 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; 
+0

@Stanley_de_boer आपका रास्ता बेहतर है ... धन्यवाद! – HydroPowerDeveloper

18

मैं अंत में इस लिंक मिल गया:

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

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

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

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

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

16

की प्रक्रिया को ऊपर (उदाहरण के लिए 30k या अधिक फ़ाइलों की गिनती) तो मैं इस तरह कुछ के साथ जाऊंगा ..

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

यह तीव्रता का क्रम तेजी से है! धन्यवाद। मेरे पास 2 9 से अधिक फाइलों वाला एक फ़ोल्डर था, और इस विधि ने गिनती को जितनी तेजी से वापस कर दिया था, मेरी अंगुली रिटर्न कुंजी से उठाई गई थी। – xizdaqrian

4

केवल फ़ाइलें

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

केवल फ़ोल्डरों

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

दोनों

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

पहले व्यक्ति पर, मैं सभी जेपीजी और पीएनजी फाइलों की खोज कैसे करूं? –

+2

@ अललोपॉप '' गेट-चाइल्ड इटिम डी: \ -रर्स -फाइल-शामिल * .jpg, *। Png | माप-वस्तु | % {$ _। गणना} '' –

1

रिकर्सिवली PowerShell 2 में निर्देशिकाओं में से फ़ाइलें गिनती।0

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

powershell इस की तलाश के लिए, severals आदेशों का उपयोग करने में आप यह कर सकते अंकों आदेश: Get-Alias;

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

write-host (ls MydirectoryName).Count 

या

write-host (dir MydirectoryName).Count 

या

write-host (Get-ChildrenItem MydirectoryName).Count