Подсчет элементов в папке с помощью PowerShell
Я пытаюсь написать очень простой сценарий PowerShell, чтобы дать мне общее количество элементов (как файлов, так и папок) в данной папке (c:MyFolder
). Вот что я сделал:
Write-Host ( Get-ChildItem c:MyFolder ).Count;
Проблема в том, что если у меня есть 1 или 0 элементов, команда не работает-она ничего не возвращает.
Есть идеи?
6 ответов:
Вы должны использовать
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;
Я наконец нашел эту ссылку:
Https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/
Ну, получается, что это причуда, вызванная именно тем, что там в каталоге был только один файл. Некоторые поиски показали, что в в этом случае PowerShell возвращает скалярный объект вместо массива. Этот объект не имеет свойства count, поэтому ему нечего делать. извлекать.
Решение -- сила PowerShell возвращает массив с символом
@
:Write-Host @( Get-ChildItem c:\MyFolder ).Count;
Если вам нужно ускорить процесс (например, подсчет 30k или более файлов), то я бы пошел с чем-то вроде этого..
$filepath = "c:\MyFolder" $filetype = "*.txt" $file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
Только Файлы
Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count}
Только Папки
Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count}
Оба
Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}