web-dev-qa-db-ja.com

PowerShellを使用してフォルダー内のアイテムをカウントする

特定のフォルダー(c:\MyFolder)内のアイテム(ファイルとフォルダーの両方)の合計数を取得するために、非常に単純なPowerShellスクリプトを作成しようとしています。私がやったことは次のとおりです。

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

問題は、1つまたは0のアイテムがある場合、コマンドが機能しないことです。つまり、何も返されません。

何か案は?

71

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;
120
Stanley De Boer

私はついにこのリンクを見つけました:

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

さて、これは、ディレクトリ内にファイルが1つしかなかったために発生した奇癖であることがわかりました。検索の結果、この場合、PowerShellは配列ではなくスカラーオブジェクトを返すことが明らかになりました。このオブジェクトにはcountプロパティがないため、取得するものはありません。

解決策-PowerShellが@シンボルを含む配列を返すように強制します。

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

プロセスを高速化する必要がある場合(たとえば、30k以上のファイルをカウントする場合)、次のようなものを使用します。

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

ファイルのみ

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

フォルダーのみ

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

両方

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

PowerShell 2.0でディレクトリ内のファイルを再帰的にカウントする

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

PowerShellでは、このコマンドの数字を探すために、いくつかのコマンドを使用できます:Get-Alias;

したがって、使用できる缶は次のとおりです。

write-Host (ls MydirectoryName).Count

または

write-Host (dir MydirectoryName).Count

または

write-Host (Get-ChildrenItem MydirectoryName).Count