我正在尝试编写一个非常简单的 PowerShell 脚本,以提供给定文件夹 ( ) 中的项目总数(文件和文件夹c:\MyFolder
)。这是我所做的:
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
问题是,如果我有 1 个或 0 个项目,该命令不起作用——它什么也不返回。
有任何想法吗?
我正在尝试编写一个非常简单的 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;
我终于找到了这个链接:
https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/
好吧,事实证明这是一个怪癖,正是因为目录中只有一个文件。一些搜索显示,在这种情况下,PowerShell 返回一个标量对象而不是一个数组。该对象没有 count 属性,因此没有任何可检索的内容。
解决方案——强制 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}
您也可以使用别名
(ls).Count
在 PowerShell 2.0 中递归计算目录中的文件
ls -rec | ? {$_.mode -match 'd'} | select FullName, @{N='Count';E={(ls $_.FullName | measure).Count}}
在 powershell 中,您可以使用多个命令来查找此命令 digit: Get-Alias
;
所以可以使用的cammands是:
write-host (ls MydirectoryName).Count
或者
write-host (dir MydirectoryName).Count
或者
write-host (Get-ChildrenItem MydirectoryName).Count
计算文件夹中特定文件类型的数量。示例是统计 F: 盘上的 mp3 文件。
( Get-ChildItme F: -Filter *.mp3 - Recurse | measure ).Count
在 6.2.3 中测试,但应该工作 >4。