我正在尝试编写一个非常简单的PowerShell脚本,以便为我提供给定文件夹(c:\MyFolder
)中项目(文件和文件夹)的总数。这就是我所做的:
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
问题是,如果我有1个或0个项目,该命令不起作用---它什么都不返回。
有什么想法吗?
答案 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