PowerShell ile bir klasördeki öğeleri sayın


92

Bana belirli bir klasördeki ( c:\MyFolder) toplam öğe sayısını (hem dosyalar hem de klasörler) vermek için çok basit bir PowerShell betiği yazmaya çalışıyorum . İşte yaptığım şey:

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

Sorun şu ki, eğer 1 veya 0 öğem varsa, komut çalışmıyor --- hiçbir şey döndürmüyor.

Herhangi bir fikir?

Yanıtlar:


151

Bir Measure-Objectşeyleri saymak için kullanmalısın . Bu durumda şöyle görünecektir:

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

ya da bu çok uzunsa

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

ve PowerShell 4.0'da measurebunun yerine diğer adı kullanınmo

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

Belirli bir klasör içindeki tüm klasörlerin sayımı nasıl alınır?
Mihir

38

Sonunda şu bağlantıyı buldum:

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

Görünüşe göre bu, dizinde yalnızca bir dosya olduğu için ortaya çıkan bir tuhaflık. Bazı aramalar, bu durumda PowerShell'in bir dizi yerine skaler bir nesne döndürdüğünü ortaya çıkardı. Bu nesnenin count özelliği yok, bu yüzden alınacak hiçbir şey yok.

Çözüm - PowerShell'i şu @simgeye sahip bir dizi döndürmeye zorlayın :

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

5
Mükemmel teşekkürler. Komutanların "yardımcı" olmaya ve dönüş türlerini değiştirmeye çalışması can sıkıcı buluyorum.
Paul Suart

35

Süreci hızlandırmanız gerekirse (örneğin 30k veya daha fazla dosyayı saymanız), o zaman bunun gibi bir şeyle giderim ..

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

Bu daha hızlı bir mertebedir! Teşekkürler. İçinde 29.000'den fazla dosya bulunan bir klasörüm vardı ve bu yöntem sayımı parmağımın RETURN anahtarından kaldırdığı kadar hızlı döndürdü.
xizdaqrian

2
Bunu buraya[System.IO.Directory]::GetFiles("$filepath", "$filetype",1) bakın ile tekrarlayabilirsiniz
Cody '

14

Yalnızca Dosyalar

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

Yalnızca Klasörler

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

Her ikisi de

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

2
İlki, tüm jpg ve png dosyalarını nasıl arayabilirim?
Al Lelopath

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


1

PowerShell 2.0'da dizinlerdeki dosyaları yinelemeli olarak sayın

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

1

Powershell'de bu komutları aramak için birkaç komut kullanabilirsiniz Get-Alias:;

Yani kutunun kullanabileceği kam komutları:

write-host (ls MydirectoryName).Count

veya

write-host (dir MydirectoryName).Count

veya

write-host (Get-ChildrenItem MydirectoryName).Count

0

Bir klasördeki belirli bir dosya türünün sayısını saymak için. Örnek, F: sürücüsündeki mp3 dosyalarını saymaktır.

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

6.2.3'te test edilmiştir, ancak> 4 çalışmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.