特定のフォルダー ( ) 内の項目 (ファイルとフォルダーの両方) の総数を取得するための非常に単純な PowerShell スクリプトを作成しようとしていますc:\MyFolder
。これが私がやったことです:
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
問題は、アイテムが 1 つまたは 0 の場合、コマンドが機能しないことです。何も返されません。
何か案は?
特定のフォルダー ( ) 内の項目 (ファイルとフォルダーの両方) の総数を取得するための非常に単純な PowerShell スクリプトを作成しようとしていますc:\MyFolder
。これが私がやったことです:
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}