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



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



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


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



какие идеи?

2846   8  

8 ответов:

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

рекурсивно подсчитывать файлы в каталогах в PowerShell 2.0

ls -rec | ? {$_.mode -match 'd'} | select FullName,  @{N='Count';E={(ls $_.FullName | measure).Count}}

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

таким образом, cammands может использовать:

write-host (ls MydirectoryName).Count

или

write-host (dir MydirectoryName).Count

или

write-host (Get-ChildrenItem MydirectoryName).Count

Comments

  1. patilrohit
    patilrohit год назад
    This was incredibly insightful! I can't wait to see more of your work.
  2. patilamit
    patilamit год назад
    "Great insights! I really enjoyed reading this post."

    https://www.technobridge.in/training/clinical-research/clinical-research-courses-in-nagpur