使用PowerShell计算文件夹中的项目
我正在尝试编写一个非常简单的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;
我终于find这个链接:
https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/
那么,事实certificate,这是一个怪癖,恰恰是因为目录中只有一个文件。 一些search显示,在这种情况下,PowerShell返回一个标量对象而不是数组。 这个对象没有count属性,所以没有任何东西需要检索。
解决scheme – 强制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}
recursion计算PowerShell 2.0中的目录中的文件
ls -rec | ? {$_.mode -match 'd'} | select FullName, @{N='Count';E={(ls $_.FullName | measure).Count}}