Powershell - 列出子目录并计算每个子目录的文件数

jim*_*mmy 2 directory powershell file powershell-ise powershell-3.0

我有一个充满子目录的目录,其中包含任意数量的 0 到 300 个文件。

我想输出子目录名称和该子目录中的文件数

到目前为止,无论子目录中有多少实际文件,我所得到的都是 0。

$dir = "C:\Folder\" 
$subFiles = (Get-ChildItem $dir -recurse | where-object {$_.PSIsContainer -eq $true })
$subFiles | % {
Get-ChildItem -Path $_ -Force -Recurse | Measure-Object | Select-Object -ExpandProperty Count
write-host "$_"
}
Run Code Online (Sandbox Code Playgroud)

有时它还包括运行脚本的目录,即“C:\Users\Blah\documents and settings\startmen”并导致错误。

任何帮助都非常感谢,谢谢

Mat*_*att 6

您至少使用 PowerShell 3.0,因为您使用-File的是 参数Get-ChildItem,因此不需要使用where-object {$_.PSIsContainer -eq $true }. 它已被参数替换-Directory。循环遍历所有文件夹并收集文件夹名称及其文件数。我删除了-Recurse文件计数,因为这可能会产生误导。如果它更适合你,就把它放回去。最后Select-Object是确保输出的顺序,它是一个对象,现在您可以对它进行排序或执行任何您想要的操作。

$dir = "C:\File" 
Get-ChildItem $dir -Recurse -Directory | ForEach-Object{
    [pscustomobject]@{
        Folder = $_.FullName
        Count = @(Get-ChildItem -Path $_.Fullname -File).Count
    }
} | Select-Object Folder,Count
Run Code Online (Sandbox Code Playgroud)

洞察力

您之前遇到过这些错误,因为您没有调用完整路径,而Get-ChildItem只是调用了文件夹名称。如果没有完整路径,Get-ChildItem则假定您正在当前目录中查找文件夹。这通常是您的用户目录。

  • @mrjayviper 这很容易。只需使用“Get-ChildItem”的“-Depth”参数 (2认同)