如何根据Powershell中的项目计数过滤子目录

时间:2019-04-23 21:12:09

标签: powershell

我试图根据每个文件夹中文件数的计数来过滤文件夹。

如果值大于1,我已经能够列出文件夹名称和值。我试图排除可能不包含任何项目的文件夹。

物品的数量每天都在变化。

$Date2 = Get-Date -Format "yyyy-MM-dd"
$Date2Str = '{0:yyyy-MM-dd}' -f $Date2

$startFolder = "U:\test"

#Returns the Count of files in each queue
$colItems = (Get-ChildItem $startFolder -recurse | Where-Object 
{$_.PSIsContainer -eq $True}  | Sort-Object) 

if($colItems -ine $null){

foreach ($i in $colItems)
 {
     $subFolderItems = (Get-ChildItem $i.FullName | Where-Object 
($_.CreationTime -lt $Date2Str -and $_.Name -like "*.tif"))
    $i.Name + " -- " -f ($subFolderItems.Count) |Format-Table 
@{Expression={$colItems -ge 1}} 

我希望$ colItems的输出为subFolder名称,并且为count,但不包括任何Count小于1或等于0的subFolder。

实际返回值是所有子文件夹(包括计数等于0的子文件夹)的子文件夹名称和计数的列表。

1 个答案:

答案 0 :(得分:1)

如果您的解释正确,那么您正在寻找类似的东西:

$startFolder = 'U:\test'

Get-ChildItem -Path $startFolder -Directory | 
Select-Object -Property Name, @{Name = 'FileCount'; Expression = { (Get-ChildItem -Path $_.FullName -File).count}}

其中列出了$startFolder的所有子文件夹以及它们的文件计数。

顺便说一句:该代码至少需要Powershell版本3。

...,当然,您现在可以将其通过管道传输到Where-Object并仅输出其中包含多个文件的文件夹...

Get-ChildItem -Path $startFolder -Directory | 
    Select-Object -Property Name, @{Name = 'FileCount'; Expression = { (Get-ChildItem -Path $_.FullName -File).count } } |
        Where-Object -Property FileCount -GT -Value 1