Подтвердить что ты не робот

Подсчитайте элементы в папке с помощью PowerShell

Я пытаюсь написать очень простой PowerShell script, чтобы дать мне общее количество элементов (файлов и папок) в данной папке (c:\MyFolder). Вот что я сделал:

Write-Host ( Get-ChildItem c:\MyFolder ).Count;

Проблема в том, что если у меня есть 1 или 0 элементов, команда не работает --- она ​​ничего не возвращает.

Любые идеи?

4b9b3361

Ответ 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.