特定のフォルダー(c:\MyFolder
)内のアイテム(ファイルとフォルダーの両方)の総数を取得するための非常に単純なPowerShellスクリプトを記述しようとしています。これが私がやったことです:
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
問題は、アイテムが1または0の場合、コマンドが機能しないことです。何も返されません。
何か案は?
特定のフォルダー(c:\MyFolder
)内のアイテム(ファイルとフォルダーの両方)の総数を取得するための非常に単純なPowerShellスクリプトを記述しようとしています。これが私がやったことです:
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
問題は、アイテムが1または0の場合、コマンドが機能しないことです。何も返されません。
何か案は?
回答:
あなたは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;
私は最終的にこのリンクを見つけました:
https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/
これは、ディレクトリにファイルが1つしかなかったために発生した問題であることがわかりました。この検索では、PowerShellが配列ではなくスカラーオブジェクトを返すことが一部の検索で明らかになりました。このオブジェクトにはcountプロパティがないため、取得するものはありません。
解決策-PowerShellに@
シンボルを含む配列を強制的に返します。
Write-Host @( Get-ChildItem c:\MyFolder ).Count;
プロセスを高速化する必要がある場合(たとえば、30k以上のファイルを数える)、私はこのようなものを使います。
$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
ファイルのみ
Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count}
フォルダのみ
Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count}
両方とも
Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
Get-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
PowerShell 2.0のディレクトリ内のファイルを再帰的にカウントする
ls -rec | ? {$_.mode -match 'd'} | select FullName, @{N='Count';E={(ls $_.FullName | measure).Count}}
powershellでは、このコマンドの数字を探すために、いくつかのコマンドを使用できますGet-Alias
。
したがって、使用できるcammandsは次のとおりです。
write-host (ls MydirectoryName).Count
または
write-host (dir MydirectoryName).Count
または
write-host (Get-ChildrenItem MydirectoryName).Count