Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

PowerShell – Count Files in Folders

Count Files in Folders in PowerShell

We can use the Measure-Object cmdlet in different ways to meet our project requirements. However, before moving forward, it is essential to know how many files and folders we have on the different paths that we will use in this article.

  • E:\Test contains three folders (FolderA, FolderB and FolderC) and four text files (File1.txt, File2.txt, File3.txt, and File4.txt).
  • FolderA contains four text files (File1.txt, File2.txt, File3.txt, and File4.txt)
  • FolderB contains two text files (File1.txt, and File2.txt)
  • FolderC has one text file (File1.txt)

Let’s practice the Measure-Object in different ways below.

Write-Host ( Get-ChildItem -Path E:\Test | Measure-Object ).Count;
7

The above command counts the files and folders from the specified path, so it counted 3 folders and 4 files in E:\Test folder.

Please note that it will count files only in specified folders and not subfolders. To count files in all the subfolders as well, use -Recurse parameter with Get-ChildItem.

To count only Files in Folder, use -File parameter.

Write-Host ( Get-ChildItem -Path E:\Test -File | Measure-Object ).Count;
4

We used the -Path parameter to write the path of the desired location. Remember that we can omit the -Path parameter if there is only one location’s path; otherwise, using the -Path parameter is required (we’ll see another example with multiple paths later).

We can even omit the location’s path if we use this command to count files and folders from the current directory. To practice, let’s move to the E:\Test directory; you can go ahead to your desired location and use the following command.

Write-Host ( Get-ChildItem | Measure-Object ).Count;
7

See, it still returned 7. Now, how did this command work? Let’s understand that starting with the Measure-Object cmdlet calculates the object’s property values. We used it to count objects; in our case, objects can be files, folders, or both. We can also use it to count objects with a given Property.

We can also use the Measure-Object to calculate Average, Sum, Minimum/Maximum, and Standard Deviation for numeric values. However, we can use Measure-Object to count the number of words, lines and characters if we are working with String objects.

We used .Count to get the count of the files/folders. Next, we used Write-Host to write customized output to the host, which means displaying the required output on the PowerShell console.

Remember that the Write-Host cmdlet does not produce the pipeline output, so we can not forward the Write-Host‘s output to another cmdlet using pipeline (also called pipe represented as |).

If you have the requirement to send your output to the next cmdlet using pipeline, then use Write-Output cmdlet, which can write the given objects to the pipeline. Next, we have the Get-ChildItem cmdlet, which we can use to get the items and child items from one or multiple locations.

Count Files in multiple Folders in PowerShell

In the above code, we used one location to get items/child items; see the following example if you want to count items/child items from multiple locations. This is where specifying the -Path parameter is mandatory because now we have multiple paths (array of paths).

Write-Host ( Get-ChildItem -Path "E:\Test", "E:\Test\FolderA" | Measure-Object ).Count;
11

This time, we got 11 because the above command counted the files and folders from E:\Test (which has three folders and four text files) and E:\Test\FolderA (which has four text files). Therefore, we can use the above command using the array operator (@()) as follows.

Write-Host ( Get-ChildItem -Path @("E:\Test", "E:\Test\FolderA") | Measure-Object ).Count;
11

Count Files in Folders and Subfolders in PowerShell

To count files in Folders and SubFolders in PowerShell, use -Recurse parameter with Get-ChildItem cmdlet and pipe it with Measure-Object cmdlet.

For this article, we have only three folders in E:\Test but think, if we have hundreds of folders, would it be an excellent approach to use the array operator or array to specify a path for each folder? Of course not!

In that case, we can use the -Recurse parameter to get all items in all child containers.

Write-Host ( Get-ChildItem "E:\Test" -Recurse | Measure-Object ).Count;
14

For the above output, it counted all files and folders from E:\Test, E:\Test\FolderA, E:\Test\FolderB, and E:\Test\FolderC, but what if more subdirectories (folders inside the folders). In that case, we may have to restrict the number of levels to recurse in PowerShell. To do that, we can use the -Depth parameter.

To practice the -Depth parameter, let’s create another folder named FolderD inside the FolderA and create four text files in FolderD. Now, execute the following pair of commands and compare both results.

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 1 | Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 1
15

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

and

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 2 | Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 2
19

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA\FolderD

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

See, we can only count the files from E:\Test\FolderA\FolderD if we have -Depth 2; this is what the -Depth parameter is used for. Remember, the Get-ChildItem cmdlet will not display the empty subdirectories; if it is used with the -Recurse or -Depth parameter, it will not include the empty directories in the output.

Now, what if we only want to count files? We can do that using the -File parameter as follows.

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 2 -File| Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 2
15

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA\FolderD

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

Count only folders inside folder in PowerShell

Use the -Directory parameter as given below to count directories only.

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 2 -Directory| Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 2
4

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA\FolderD

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

We can use the following command for a more organized, short, clean output.

ls -rec | ? {$_.mode -match 'd'} | select FullName, 
@{N='Count';E={(ls $_.FullName | measure).Count}}
FullName                          Count
--------                                   -----
E:\Test\FolderA                    5
E:\Test\FolderB                    2
E:\Test\FolderC                    1
E:\Test\FolderA\FolderD            4

In the above code fence, measure is an alias of Measure-Object. We can also use the ls command (it is used to list the directory content) as follows to count files and folders from the parent directory only, which is E:\Test in our case.

write-host (ls "E:\Test").Count

(ls).count
7
7

Count Files by Extension in Folder in PowerShell

To count File by Extension in Folder in PowerShell, use group Extension -NoElement with Get-ChildItem cmdlet.

Here is an example:

Get-ChildItem -Recurse -File | group Extension -NoElement
Count Name
----- ----
   11 .txt

That’s all about how to count files in folders in PowerShell.



This post first appeared on How To Learn Java Programming, please read the originial post: here

Share the post

PowerShell – Count Files in Folders

×

Subscribe to How To Learn Java Programming

Get updates delivered right to your inbox!

Thank you for your subscription

×