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

时间:2014-10-11 23:50:15

标签: file powershell directory powershell-v3.0 powershell-ise

我有一个充满子目录的目录,其中包含任意数量的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 "$_"
}

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

任何帮助非常感谢谢谢

3 个答案:

答案 0 :(得分:2)

由于您使用-File的{​​{1}}参数,因此至少使用PowerShell 3.0,因此您无需使用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 中您只是调用文件夹名称的完整路径。如果没有完整路径Get-ChildItem,则假定您在当前目录中查找文件夹。这通常是您的用户目录。

答案 1 :(得分:1)

对于远程目录,这种计数方法似乎更快。

$count = [System.IO.Directory]::GetFiles($_.Fullname).Count

答案 2 :(得分:0)

这完全符合我的要求:)它不是很漂亮,但它有效..

$dir = "C:\folder\"
$subFiles = (Get-ChildItem $dir -recurse | where-object {$_.PSIsContainer -eq $true })
$subFiles | % {
$path = $dir+$_
$files = Get-ChildItem -Path $path -Force -Recurse -File -ErrorAction SilentlyContinue
write-host "$_ Files:" $files.count
}