Как отфильтровать подкаталоги по количеству элементов в Powershell - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь отфильтровать папки на основе количества файлов в каждой папке.

Мне удалось перечислить имя и значение папки, если значение больше 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 будут именем подфолдера и числом, исключая любой подфолдер с числом меньше 1 или равным 0.

Фактическим возвращением является список Имен подпапок, который включает все вложенные папки, включая те, у которых число равно 0.

1 Ответ

1 голос
/ 24 апреля 2019

Если я правильно понял ваше объяснение, вы ищете что-то вроде этого:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...