用Powershell计算文件夹

有谁知道一个PowerShell 2.0命令/脚本来计算特定文件夹中的所有文件夹和子文件夹(recursion;没有文件)(例如在C:\ folder1 \ folder2中的所有子文件夹的数量)?

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

Solutions Collecting From Web of "用Powershell计算文件夹"

您可以使用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 

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

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

这是一个非常好的起点:

 (gci -force -recurse | where-object { $_.PSIsContainer }).Count 

但是,我怀疑这将包括计数中的.zip文件。 我会测试,并尝试发布更新…

编辑:已确认zip文件计为容器。 以上应该没问题!

要回答您的问题的第二部分,获取叶文件夹计数,只需修改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 

另外一个选择:

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

获取具有追索权选项的路径子项目,将其过滤为仅过滤容器,再次管道以测量项目数量

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