使用 Powershell 计算文件夹数量

10

有没有人知道一个 powershell 2.0 命令/脚本来计算特定文件夹中所有文件夹和子文件夹(递归; 不包括文件)的数量(例如 C:\folder1\folder2 中所有子文件夹的数量)?

此外,我还需要所有“叶子”文件夹的数量。换句话说,我只想计算没有子文件夹的文件夹。

6个回答

18

在PowerShell 3.0中,你可以使用Directory开关:

(Get-ChildItem -Path <path> -Directory -Recurse -Force).Count

10

您可以使用get-childitem -recurse获取当前文件夹中的所有文件和文件夹。

将其导入到Where-Object中,以仅过滤那些是容器的文件。

$files = get-childitem -Path c:\temp -recurse 
$folders = $files | where-object { $_.PSIsContainer }
Write-Host $folders.Count

一行代码实现:

(get-childitem -Path c:\temp -recurse | where-object { $_.PSIsContainer }).Count

3
为了回答你问题的第二部分,即获取叶子文件夹的数量,只需修改where对象子句以添加非递归搜索每个目录,仅获取返回计数为0的那些:
(dir -rec | where-object{$_.PSIsContainer -and ((dir $_.fullname | where-object{$_.PSIsContainer}).count -eq 0)}).Count

如果您可以使用Powershell 3.0版本,它看起来会更加简洁:

(dir -rec -directory | where-object{(dir $_.fullname -directory).count -eq 0}).count

3

另一个选项:

(ls -force -rec | measure -inp {$_.psiscontainer} -Sum).sum

2
这是一个相当不错的起点:
(gci -force -recurse | where-object { $_.PSIsContainer }).Count

然而,我怀疑这将包括计算 .zip 文件。 我会测试并尝试发布更新...
编辑:已确认 zip 文件不被视为容器。 上述应该没问题!

0

使用递归选项获取路径子项,将其传输到筛选器以仅保留容器,再次传输以测量项目计数

((get-childitem -Path $the_path -recurse | where-object { $_.PSIsContainer }) | measure).Count

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接