PowerShell: 使用 PowerShell 对文件夹中的项进行计数

我正在尝试编写一个非常简单的 PowerShell 脚本来给出给定文件夹(c:\MyFolder)中的项目总数(包括文件和文件夹)。我是这么做的:

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

问题是,如果我有1或0个项,命令就不能工作——-它什么也不返回。

有什么想法吗?

231505 次浏览

我终于找到了这个链接:

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

事实证明,这种怪癖的产生正是因为 was only one file in the directory. Some searching revealed that in this case, PowerShell returns a scalar object instead of an array. 这个对象没有 count 属性,因此没有任何 取回。

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

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

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

如果你需要加快这个过程(例如计算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

or

write-host (Get-ChildrenItem MydirectoryName).Count

计算文件夹中特定文件类型的数目。 The example is to count mp3 files on F: drive.

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

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

也可以使用别名

(ls).Count