0

I am trying to reliably get the subfolder count in a PowerShell script. I am avoiding Get-ChildItems due to its slowness and instead trying to use C#. See the picture. The syntax seems OK for files but not subfolders. The correct counts are returned for files, but not for folders. It's probably a simple fix, but it is rather annoying.

Image

Code sample:

ForEach ($SubDir in ($DirObjects | ?{$_.PSIsContainer})){
    $NoOfex4Files = [System.IO.Directory]::EnumerateFiles($SubDir.FullName, '*.ex4')| Measure-Object| %{$_.Count}
    $NoOfmq4Files = [System.IO.Directory]::EnumerateFiles($SubDir.FullName, '*.mq4')| Measure-Object| %{$_.Count}
    $NoOfSubFolder = [System.IO.Directory]::EnumerateDirectories($SubDir.FullName,'*')| Measure-Object| %{$_.Count}
    #$NoOfSubFolder= [System.IO.DirectoryInfo]::new($SubDir.FullName)::GetDirectories| Measure-Object| %{$_.Count}
karel
  • 5,489
  • 46
  • 45
  • 50
  • You can refer this one if you are using C# [https://stackoverflow.com/questions/9830069/searching-for-file-in-directories-recursively](https://stackoverflow.com/questions/9830069/searching-for-file-in-directories-recursively) – RajM Aug 22 '21 at 12:37
  • Please don't post code in pictures. Make a minimal example and post it in text – Emond Aug 22 '21 at 12:50
  • Small sample code provided - should be self explanatory – Nicholas Wales Aug 22 '21 at 14:23

1 Answers1

0
#SOl 1 $NoOfSubFolder = [System.IO.Directory]::EnumerateDirectories($SubDir.FullName, '*','TopDirectoryOnly')| Measure-Object| %{$_.Count}

## NOT THIS $NoOfSubFolder= [System.IO.DirectoryInfo]::new($SubDir.FullName)::GetDirectories| Measure-Object| %{$_.Count}
#SOL2 $NoOfSubFolder= (Get-ChildItem $SubDir.FullName -Recurse -Directory | Measure-Object).Count
#SOL3 $NoOfSubFolder = Get-ChildItem $SubDir.FullName -Recurse |? { $_.PSIsContainer } |Measure-Object |select -Expand Count