我有一个充满子目录的目录,其中包含任意数量的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”并导致错误。
任何帮助非常感谢谢谢
答案 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
}