-1

Как бы я использовал powershell для подсчета количества файлов и количества папок в папке, эмулируя Windows-свойства этой папки?

(get-childitem -recurse).count

возвращает общее количество объектов (сумма количества папок и файлов) и

(gci -rec | where { $_.PSIsContainer }).count

возвращает количество папок. Но есть ли способ подсчитать как папки, так и файлы в одной команде, не пересекая файловую систему дважды? Я предполагаю, что можно написать процедурный код PowerShell с именованными переменными и циклами, но это не похоже на обычный способ его использования.


А по смежной теме http://technet.microsoft.com/en-us/library/ee692796.aspx описывает два способа получения списка имен файлов:

Get-ChildItem C:\Scripts | Select-Object Name

а также

Get-ChildItem C:\Scripts -name

Автор утверждает, что они эквивалентны, но с -recurse первая возвращает только имена файлов, а вторая возвращает полный путь. Есть ли способ заставить Select-Object возвращать полный путь, чтобы эти две команды генерировали одинаковый вывод? (Случайный удар в Select-Object Path дал пустые строки, а не пути.)

gci -rec -name
gci -rec | Select-Object xxx?

1 ответ1

1

Вы можете получить тип каждого элемента при переборе файлов, а затем использовать командный group-object для подсчета каждого типа:

dir -rec | %{$_.GetType()} | group-object name | select name,count

Name          Count
----          -----
DirectoryInfo    15
FileInfo         26

Чтобы ответить на второй вопрос, просто выберите свойство FullName :

Get-ChildItem C:\Scripts | Select-Object FullName

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .