Подсчитайте элементы в папке с помощью PowerShell
Я пытаюсь написать очень простой PowerShell script, чтобы дать мне общее количество элементов (файлов и папок) в данной папке (c:\MyFolder
). Вот что я сделал:
Write-Host ( Get-ChildItem c:\MyFolder ).Count;
Проблема в том, что если у меня есть 1 или 0 элементов, команда не работает --- она ничего не возвращает.
Любые идеи?
Ответы
Ответ 1
Вы должны использовать Measure-Object
для подсчета вещей. В этом случае это будет выглядеть так:
Write-Host ( Get-ChildItem c:\MyFolder | Measure-Object ).Count;
или если слишком длинный
Write-Host ( dir c:\MyFolder | mo).Count;
а в PowerShell 4.0 используйте псевдоним measure
вместо mo
Write-Host (dir c:\MyFolder | measure).Count;
Ответ 2
Наконец я нашел эту ссылку:
https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/
Ну, оказывается, что это причуда, вызванная именно тем, что там был только один файл в каталоге. Некоторые поиски показали, что в этот случай, PowerShell возвращает скалярный объект вместо массива. Этот объект не имеет свойства count, поэтому нет ничего получить.
Решение - заставить PowerShell вернуть массив с символом @
:
Write-Host @( Get-ChildItem c:\MyFolder ).Count;
Ответ 3
Если вам нужно ускорить процесс (например, подсчитав 30 тыс. или более файлов), я бы пошел с чем-то вроде этого.
$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
Ответ 4
Только файлы
Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count}
Только папки
Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count}
И
Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
Ответ 5
Рекурсивно считать файлы в каталогах в PowerShell 2.0
ls -rec | ? {$_.mode -match 'd'} | select FullName, @{N='Count';E={(ls $_.FullName | measure).Count}}
Ответ 6
В powershell вы можете использовать несколько команд для поиска этой цифры: Get-Alias
;
Итак, команды, которые можно использовать:
write-host (ls MydirectoryName).Count
или
write-host (dir MydirectoryName).Count
или
write-host (Get-ChildrenItem MydirectoryName).Count
Ответ 7
Для подсчета количества файлов определенного типа в папке.
Пример - считать mp3 файлы на диске F :.
( Get-ChildItme F: -Filter *.mp3 - Recurse | measure ).Count
Проверено в 6.2.3, но должно работать> 4.