112

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

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

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

有任何想法吗?

4

8 回答 8

182

你应该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;
于 2013-02-05T20:46:39.277 回答
42

我终于找到了这个链接:

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

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

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

Write-Host @( Get-ChildItem c:\MyFolder ).Count;
于 2013-02-05T18:40:04.863 回答
40

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

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
于 2014-11-13T05:48:22.800 回答
17

仅文件

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

仅文件夹

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

两个都

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
于 2015-08-13T12:22:02.383 回答
4

您也可以使用别名

(ls).Count
于 2020-12-24T02:28:43.397 回答
3

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

ls -rec | ? {$_.mode -match 'd'} | select FullName,  @{N='Count';E={(ls $_.FullName | measure).Count}}
于 2016-03-11T23:01:02.287 回答
1

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

所以可以使用的cammands是:

write-host (ls MydirectoryName).Count

或者

write-host (dir MydirectoryName).Count

或者

write-host (Get-ChildrenItem MydirectoryName).Count
于 2018-02-14T19:33:14.357 回答
0

计算文件夹中特定文件类型的数量。示例是统计 F: 盘上的 mp3 文件。

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

在 6.2.3 中测试,但应该工作 >4。

于 2019-09-27T13:02:53.557 回答