8

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

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

4

6 回答 6

14

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

(Get-ChildItem -Path <path> -Directory -Recurse -Force).Count
于 2012-10-17T12:39:31.153 回答
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
于 2012-10-17T12:21:37.830 回答
3

另外一个选项:

(ls -force -rec | measure -inp {$_.psiscontainer} -Sum).sum
于 2012-10-18T05:32:52.560 回答
2

这是一个很好的起点:

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

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

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

于 2012-10-17T12:21:26.513 回答
2

要回答问题的第二部分,即获取叶文件夹计数,只需修改 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
于 2012-10-17T17:07:16.037 回答
0

使用 recourse 选项获取路径子项,通过管道仅过滤容器,再次通过管道测量项目数

((get-childitem -Path $the_path -recurse | where-object { $_.PSIsContainer }) | measure).Count
于 2017-04-28T09:05:31.417 回答