使用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}} 
    Interesting Posts