使用PowerShell计算文件夹中的项目

时间:2013-02-05 18:25:01

标签: powershell-v2.0

我正在尝试编写一个非常简单的PowerShell脚本,以便为我提供给定文件夹(c:\MyFolder)中项目(文件和文件夹)的总数。这就是我所做的:

Write-Host ( Get-ChildItem c:\MyFolder ).Count;

问题是,如果我有1个或0个项目,该命令不起作用---它什么都不返回。

有什么想法吗?

8 个答案:

答案 0 :(得分:111)

您应该使用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;

答案 1 :(得分:29)

我终于找到了这个链接:

https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/

  

嗯,事实证明这是一个奇怪的原因,正是因为那里   只是目录中的一个文件。一些搜索显示在   在这种情况下,PowerShell返回标量对象而不是数组。   此对象没有count属性,因此没有任何内容   检索。

解决方案 - 强制PowerShell返回带有@符号的数组:

Write-Host @( Get-ChildItem c:\MyFolder ).Count;

答案 2 :(得分:27)

如果你需要加快这个过程(例如计算30k或更多文件),那么我会选择这样的东西..

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count

答案 3 :(得分:8)

仅文件

Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count}

仅限文件夹

Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count}

两个

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}

答案 4 :(得分:1)

递归计算PowerShell 2.0中目录中的文件

ls -rec | ? {$_.mode -match 'd'} | select FullName,  @{N='Count';E={(ls $_.FullName | measure).Count}}

答案 5 :(得分:0)

在powershell中,您可以使用多个命令来查找此命令数字:Get-Alias;

所以可以使用的cammands是:

write-host (ls MydirectoryName).Count

write-host (dir MydirectoryName).Count

write-host (Get-ChildrenItem MydirectoryName).Count

答案 6 :(得分:0)

计算文件夹中特定文件类型的数量。 该示例是对F:驱动器上的mp3文件进行计数。

( Get-ChildItme F: -Filter *.mp3 - Recurse | measure ).Count

在6.2.3中进行了测试,但应该可以在> 4下工作。

答案 7 :(得分:0)

您也可以使用别名

(ls).Count