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


92

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

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

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

Любые идеи?

Ответы:


151

Вы должны использовать 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;

Как подсчитать количество всех папок внутри определенной папки?
Mihir

38

Я наконец нашел эту ссылку:

https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/

Что ж, оказывается, это причуда вызвана именно тем, что в каталоге был только один файл. Некоторый поиск показал, что в этом случае PowerShell возвращает скалярный объект вместо массива. У этого объекта нет свойства count, поэтому извлекать нечего.

Решение - заставить PowerShell возвращать массив с @символом:

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

5
Отлично, спасибо. Меня раздражает, когда командлеты пытаются быть «полезными» и меняют свой тип возвращаемого значения.
Paul Suart

35

Если вам нужно ускорить процесс (например, подсчитать 30k или более файлов), я бы пошел с чем-то вроде этого ..

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count

Это на порядок быстрее! Спасибо. У меня была папка с более чем 29 КБ файлов, и этот метод возвращал счет так же быстро, как мой палец убирался с клавиши RETURN.
xizdaqrian

2
Вы можете повторить это с помощью [System.IO.Directory]::GetFiles("$filepath", "$filetype",1)See here
Cody G

14

Только файлы

Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count}

Только папки

Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count}

И то и другое

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}

2
На первом, как мне искать все файлы jpg и png?
Al Lelopath

4
@AlLelopathGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
hdev

привет @dhcgn, любой совет по этому stackoverflow.com/questions/54916917/…
rickyProgrammer


1

В Powershell вы можете использовать severals команду, для поиска для этой цифры команд: Get-Alias;

Итак, можно использовать следующие команды:

write-host (ls MydirectoryName).Count

или

write-host (dir MydirectoryName).Count

или

write-host (Get-ChildrenItem MydirectoryName).Count

0

Для подсчета количества файлов определенного типа в папке. Пример - подсчет mp3-файлов на диске F :.

( Get-ChildItme F: -Filter *.mp3 - Recurse | measure ).Count

Проверено в 6.2.3, но должно работать> 4.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.