我正在尝试编写一个非常简单的 PowerShell 脚本来给出给定文件夹(c:\MyFolder)中的项目总数(包括文件和文件夹)。我是这么做的:
c:\MyFolder
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
问题是,如果我有1或0个项,命令就不能工作——-它什么也不返回。
有什么想法吗?
我终于找到了这个链接:
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来计数。在这种情况下,它看起来像:
Measure-Object
Write-Host ( Get-ChildItem c:\MyFolder | Measure-Object ).Count;
或者太长了
Write-Host ( dir c:\MyFolder | mo).Count;
在 PowerShell 4.0中使用 measure别名而不是 mo
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;
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