Подсчет количества файлов по подпапкам
Я пытаюсь использовать 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
...