Подсчет количества файлов по подпапкам

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

У меня есть этот скрипт

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

Который перечисляет количество файлов, но ставит полный путь (т.е. C:\Users\name\Desktop\1\2\-movi...). Есть ли способ просто отобразить последнюю папку ("фильмы"), а также сохранить результат в файл.txt?

Спасибо

2 ответа

Решение

Вместо $_.FullNameиспользовать $_.Name чтобы получить только имя каталога.

Ваш Select-Object Вызов избыточен - это фактически неоперация.

Хотя результаты легко отправить .txt файл с >Например, лучше использовать более структурированный формат для последующей программной обработки. В простейшей форме это означает вывод в файл CSV через Export-Csv; однако, как правило, наиболее точным способом сериализации объектов в файл является использование Export-CliXml,

С помощью Export-Csv для сериализации:

$dir = 'C:\Users\folder'
Get-ChildItem -LiteralPath $dir -Recurse -Directory | ForEach-Object {
    [pscustomobject] @{
      Folder = $_.Name
      Count = @(Get-ChildItem -LiteralPath $_.Fullname -File).Count
    }
} | Export-Csv -NoTypeInformation results.csv

Обратите внимание, что вы могли бы упростить свою команду, заменив ForEach-Object позвонить с Select-Object вызов, который использует вычисляемое свойство:

$dir = 'C:\Users\folder'
Get-ChildItem -LiteralPath $dir -Recurse -Directory |
  Select-Object Name,
    @{ n='Count'; e={@(Get-ChildItem -LiteralPath $_.Fullname -File).Count} } |
      Export-Csv -NoTypeInformation results.csv

Вы имеете в виду что-то вроде этого...

Clear-Host
Get-ChildItem -Path 'd:\temp' -Recurse -Directory | 
Select-Object Name,FullName,
@{Name='FileCount';Expression = {(Get-ChildItem -Path $_.FullName -File -Recurse| Measure-Object).Count}} `
| Format-Table -AutoSize

# Results


Name           FullName                               FileCount
----           --------                               ---------
abcpath0       D:\temp\abcpath0                               5
abcpath1       D:\temp\abcpath1                               5
abcpath2       D:\temp\abcpath2                               5
Duplicates     D:\temp\Duplicates                         12677
EmptyFolder    D:\temp\EmptyFolder                            0
NewFiles       D:\temp\NewFiles                               4
PngFiles       D:\temp\PngFiles                               4
results        D:\temp\results                              905
...
Другие вопросы по тегам