特定のフォルダー(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}
PowerShell 2.0でディレクトリ内のファイルを再帰的にカウントする
ls -rec | ? {$_.mode -match 'd'} | select FullName, @{N='Count';E={(ls $_.FullName | measure).Count}}
PowerShellでは、このコマンドの数字を探すために、いくつかのコマンドを使用できます:Get-Alias
;
したがって、使用できる缶は次のとおりです。
write-Host (ls MydirectoryName).Count
または
write-Host (dir MydirectoryName).Count
または
write-Host (Get-ChildrenItem MydirectoryName).Count