DonationCoder.com Forum

DonationCoder.com Software => Coding Snacks => Post New Requests Here => Topic started by: nkormanik on February 25, 2019, 07:06 AM

Title: Does any folder in tree have more than one file in it?
Post by: nkormanik on February 25, 2019, 07:06 AM
Given a large directory tree full of folders, maybe thousands, each and every folder is ONLY supposed to have one single file within it.

If there is any folder with more than a single file within it, I need to take a look at what the additional file(s) is/are.

The task of following each and every branch, and opening every folder to have a peek is enormously daunting, really time consuming.

Instead, ideally, software can go throughout and do the checking.

If more than one file is in a single folder, create a link to that folder, to form a list of links.

After the process, one can click on a link to automatically open said folder in explorer.

An additional option might be to show the number of files found.  But not so necessary as simply providing the link to the folder.

Any programming help from you wizards will be greatly appreciated.

As far as existing solutions out there, TreeSize sort of appears helpful.  However, two issues with TreeSize:  1. It chokes before even showing a list of folders.  2. There is no way of telling it to ONLY show folders with MORE THAN ONE file within it; it shows ALL folders.

Thoughts and suggestions much appreciated.

Nicholas Kormanik

Title: Re: Does any folder in tree have more than one file in it?
Post by: c.gingerich on February 25, 2019, 07:11 AM
I think I can whip something up. Give me a few
Title: Re: Does any folder in tree have more than one file in it?
Post by: c.gingerich on February 25, 2019, 07:49 AM
Here is a quick and dirty app I call More Than One File. Extract mtof.exe and run. Enter or browse for the root folder and press Process. It'll add any sub-folder that has more than one file to the list. Double click the list item to open that folder.

Download - https://cl.ly/41efdf

Version History
1.2.27.2019 - Updated to include ALL sub-folders under the root [recursive list].
1.2.25.2019 - Initial release

[ You are not allowed to view attachments ]

Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on February 25, 2019, 07:55 PM
c.gingerich, beautiful work.  Close, but not quite.  mtof.exe is a keeper as is.  But the program requested must make a distinction between "files" and "folders."

mtof.exe presently groups the two together.

Does any folder have more than a single "file" within it?

Perhaps Windows doesn't allow for the distinction.

By the way, I tried again with TreeSize, and left it running overnight.  Still was not able to show a refreshed window with results by morning.  Just sat there.  Duh.  And this the Cadillac of such processing.



Title: Re: Does any folder in tree have more than one file in it?
Post by: c.gingerich on February 26, 2019, 08:03 AM
But the program requested must make a distinction between "files" and "folders."

I guess I am not understanding what you mean. mtof does not include folders when counting, it only counts "files" that are in the sub-folders under the root folder. Maybe you can show me what you mean with a screen shot?
Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on February 26, 2019, 06:50 PM
My bad.  Not sure how to word it.  Top-level, as opposed to out in a branch?

Please see images:

[ You are not allowed to view attachments ]

In the case of Garth, there are two files nested.  Only one in any particular folder.

[ You are not allowed to view attachments ]

In the case of Wende, there are also two files nested.  But they reside in one single folder.

mtof.exe treats both of these scenarios the same.

It's the Wende case I want to flag.



Title: Re: Does any folder in tree have more than one file in it?
Post by: c.gingerich on February 26, 2019, 06:53 PM
Ok so you want it to go deeper than one folder if I am understanding.
Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on February 26, 2019, 07:02 PM
I had to modify my post above, to get the images right.  See if that helps to explain.

Using an actual tree analogy, only ONE BIRD is allowed to rest on any ONE BRANCH.  If TWO BIRDS are resting together on any single branch, must call 911.  (Police state, ya know.)
Title: Re: Does any folder in tree have more than one file in it?
Post by: c.gingerich on February 27, 2019, 08:48 AM
@nkormanik - I have updated mtof. Please give it a try and let me know.
Title: Re: Does any folder in tree have more than one file in it?
Post by: 4wd on February 28, 2019, 08:11 PM
Something simple in PowerShell because I wanted to see how to get things into a ListView - was pretty easy after I dumped trying to get it all into a multi-dimensional array first Woohoo! worked out how to create one  :D

[ You are not allowed to view attachments ]

EBO.ps1
Code: PowerShell [Select]
  1. <# This form was created using POSHGUI.com  a free online gui designer for PowerShell
  2. .NAME
  3.     EBO.ps1
  4. #>
  5.  
  6. #region begin GUI{
  7. Add-Type -AssemblyName System.Windows.Forms
  8. [System.Windows.Forms.Application]::EnableVisualStyles()
  9.  
  10. $Form                            = New-Object system.Windows.Forms.Form
  11. $Form.ClientSize                 = '400,579'
  12. $Form.text                       = "EBO"
  13. $Form.BackColor                  = "#b8e986"
  14. $Form.TopMost                    = $false
  15.  
  16. $ListView1                       = New-Object system.Windows.Forms.ListView
  17. $ListView1.View                  = 'Details'
  18. $ListView1.MultiSelect           = $false
  19. $ListView1.GridLines             = $true
  20. $ListView1.width                 = 369
  21. $ListView1.height                = 442
  22. $ListView1.Anchor                = 'top,right,bottom,left'
  23. $ListView1.location              = New-Object System.Drawing.Point(15,100)
  24.  
  25. $TextBox1                        = New-Object system.Windows.Forms.TextBox
  26. $TextBox1.multiline              = $false
  27. $TextBox1.width                  = 268
  28. $TextBox1.height                 = 20
  29. $TextBox1.location               = New-Object System.Drawing.Point(15,27)
  30. $TextBox1.Font                   = 'Microsoft Sans Serif,10'
  31.  
  32. $Button1                         = New-Object system.Windows.Forms.Button
  33. $Button1.text                    = "..."
  34. $Button1.width                   = 28
  35. $Button1.height                  = 25
  36. $Button1.location                = New-Object System.Drawing.Point(291,26)
  37. $Button1.Font                    = 'Microsoft Sans Serif,10'
  38.  
  39. $Button2                         = New-Object system.Windows.Forms.Button
  40. $Button2.text                    = "Start"
  41. $Button2.width                   = 60
  42. $Button2.height                  = 25
  43. $Button2.location                = New-Object System.Drawing.Point(325,26)
  44. $Button2.Font                    = 'Microsoft Sans Serif,10'
  45.  
  46. $Button3                         = New-Object system.Windows.Forms.Button
  47. $Button3.text                    = "Death by File Size"
  48. $Button3.width                   = 140
  49. $Button3.height                  = 25
  50. $Button3.location                = New-Object System.Drawing.Point(15,63)
  51. $Button3.Font                    = 'Microsoft Sans Serif,10'
  52.  
  53. $Button4                         = New-Object system.Windows.Forms.Button
  54. $Button4.text                    = "Death by Bit Rate"
  55. $Button4.width                   = 140
  56. $Button4.height                  = 25
  57. $Button4.location                = New-Object System.Drawing.Point(244,63)
  58. $Button4.Font                    = 'Microsoft Sans Serif,10'
  59.  
  60. $Label1                          = New-Object system.Windows.Forms.Label
  61. $Label1.Text                     = 'Double-click folder to open'
  62. $Label1.AutoSize                 = $true
  63. $Label1.Width                    = 100
  64. $Label1.Height                   = 10
  65. $Label1.Anchor                   = 'bottom,left'
  66. $Label1.Location                 = New-Object System.Drawing.Point(120,552)
  67. $Label1.Font                     = 'Microsoft Sans Serif,10'
  68.  
  69. $ToolTip1                        = New-Object System.Windows.Forms.ToolTip
  70. $ToolTip1.AutomaticDelay         = 500
  71. $ToolTip1.IsBalloon              = $true
  72. $ToolTip1.SetToolTip($Button4, "Keep highest bit rate file")
  73. $Form.controls.AddRange(@($Button4))
  74.  
  75. $ToolTip2                        = New-Object System.Windows.Forms.ToolTip
  76. $ToolTip2.AutomaticDelay         = 500
  77. $ToolTip2.IsBalloon              = $true
  78. $ToolTip2.SetToolTip($Button3, "Keep largest file")
  79. $Form.controls.AddRange(@($Button3))
  80.  
  81. $ToolTip3                        = New-Object System.Windows.Forms.ToolTip
  82. $ToolTip3.AutomaticDelay         = 500
  83. $ToolTip3.IsBalloon              = $true
  84. $ToolTip3.SetToolTip($Button1, "Select folder")
  85. $Form.controls.AddRange(@($Button1))
  86.  
  87. $Form.controls.AddRange(@($ListView1,$TextBox1,$Button1,$Button2,$Button3,$Button4,$Label1))
  88.  
  89. #region gui events {
  90. $ListView1.Add_DoubleClick({
  91.   Start-Process ($ListView1.SelectedItems).Text
  92. })
  93.  
  94. $Button3.Add_Click({
  95.   Murder-Them Size
  96. })
  97.  
  98. $Button4.Add_Click({
  99.   Murder-Them BitRate
  100. })
  101.  
  102. $Button2.Add_Click({
  103.   $ListView1.Clear() | Out-Null
  104.   $ListView1.Columns.Add('Folder') | Out-Null
  105.   $ListView1.Columns.Add('Files') | Out-Null
  106.  
  107.   Get-Folders $TextBox1.Text
  108. })
  109.  
  110. $Button1.Add_Click({
  111.   $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
  112.   $objForm.Description = "Select folder"
  113.   $objForm.SelectedPath = [System.Environment+SpecialFolder]'MyComputer'
  114.   $objForm.ShowNewFolderButton = $false
  115.   $result = $objForm.ShowDialog()
  116.   if ($result -eq "OK") {
  117.     $TextBox1.Text = $objForm.SelectedPath
  118.   } else {
  119.     $TextBox1.Text = ""
  120.   }
  121. })
  122.  
  123. #endregion events }
  124. #endregion GUI }
  125.  
  126. #Write your logic code here
  127. Add-Type -AssemblyName Microsoft.VisualBasic
  128.  
  129. Function Murder-Them {
  130.   param (
  131.     [string]$sort
  132.   )
  133.   Write-Host '---'
  134.   for ($i = 0; $i -lt $ListView1.Items.Count; $i++ ) {
  135.     $files = (Get-MetaData -path $ListView1.Items[$i].Text .mp3)
  136.     $temp = @()
  137.     for ($j = 0; $j -lt $files.Count; $j++) {
  138.       $temp += ,@( $files[$j].'Path', (((Get-Item $files[$j].'Path').Length).ToString()).PadLeft(20, '0') , ($files[$j].'Bit rate' -replace '.{4}$').PadLeft(4, '0') )
  139.     }
  140.  
  141.     if ($sort -eq 'Size') {
  142.       $temp = $temp | Sort-Object {$_[1]}
  143.     } else {
  144.       $temp = $temp | Sort-Object {$_[2]}
  145.     }
  146.  
  147.     for ($k = 0; $k -lt $temp.Count - 1; $k++) {
  148.       [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile("$($temp[$k][0])",'OnlyErrorDialogs','SendToRecycleBin')
  149. #      Remove-Item -Path "$($temp[$k][0])"
  150.     }
  151.   }
  152. }
  153.  
  154. Function Get-MetaData {
  155.   PARAM (
  156.     [PARAMETER(Mandatory=$true)]
  157.     [string]$path = "",
  158.     [PARAMETER( Mandatory=$true, HelpMessage="extension eg. .mp3, .txt or .mov")]
  159.     [string]$type = "", # 'mp3'
  160.     [switch]$recurse
  161.   )
  162.   if ($recurse) {
  163.     $LPath = Get-ChildItem -Path $path -Directory -Recurse
  164.   } else {
  165.     $LPath = $path
  166.   }
  167.  
  168.   $DirectoryCount = 1
  169.   $RetrievedMetadata = $true
  170.   $OutputList = New-Object 'System.Collections.generic.List[psobject]'
  171.  
  172.   Foreach ($pa in $LPath) {
  173.     $shell = New-Object -ComObject shell.application
  174.  
  175.     if ($recurse) {
  176.       $objshell = $shell.NameSpace($pa.FullName)
  177.     } else {
  178.       $objshell = $shell.NameSpace($pa)
  179.     }
  180.     #Build data list
  181.     $count = 0
  182.  
  183.     #Filter on filetype
  184.     Measure-Command -Expression { $filter = $objshell.items() | where {$_.path -match $type} } | Out-File -FilePath K:\test.txt
  185.     foreach ($file in $filter) {
  186.       if ($RetrievedMetadata) {
  187.         # Build metanumbers
  188.         Write-Verbose "Building MetaIndex for filetype $type"
  189.         $Metanumbers = New-Object -TypeName 'System.Collections.Generic.List[int]'
  190.         for ($a = 0; $a -le 400; $a++) {
  191.           if ($objshell.GetDetailsOf($file, $a)) {
  192.             $Metanumbers.Add([int]$a)
  193.           }    
  194.         }
  195.         $RetrievedMetadata = $false
  196.         Write-Verbose "$($Metanumbers.Count) entries in MetaIndex for filetype $type"    
  197.       }
  198.  
  199.       $count++
  200.       $CurrentDirectory = Get-ChildItem -Path $file.path
  201.       try {
  202.         Write-Progress -Activity " Getting metadata from $DirectoryCount/$($LPath.count) $($CurrentDirectory[0].DirectoryName)" -Status "Working on $count/$($filter.count) - $($file.Name)" -PercentComplete (($count / $filter.count) * 100) -ErrorAction stop
  203.       } catch {}
  204.  
  205.       #Build Hashtable for each file
  206.       $Hash = @{}
  207.       foreach ($nr in $Metanumbers) {
  208.         $PropertyName = $($objshell.GetDetailsOf($objshell.Items, $nr))
  209.         $PropertyValue = $($objshell.GetDetailsOf($File, $nr))
  210.         $Hash[$PropertyName] = $PropertyValue
  211.       }
  212.            
  213.       $Hash.Remove("")
  214.       $FileMetaData = New-Object -TypeName PSobject -Property $hash
  215.       $OutputList.Add($FileMetaData)
  216.       $hash = $null
  217.     }
  218.     $DirectoryCount++        
  219.   }
  220.   Write-Verbose "MetaData for $($OutputList.count) files found"
  221.   return $OutputList
  222. }
  223.  
  224. Function Get-Folders {
  225.   param (
  226.     [string]$path
  227.   )
  228.   $a = Get-ChildItem $path -Recurse -Directory
  229.   for ($i = 0; $i -lt $a.Count; $i++) {
  230.     $b = (Get-ChildItem $a[$i].FullName -File | Measure-Object).Count
  231.     if ($b -gt 1) {
  232.       $ListView_Item = New-Object System.Windows.Forms.ListViewItem($a[$i].FullName)
  233.       $ListView_Item.SubItems.Add($b)
  234.       $ListView1.Items.AddRange(($ListView_Item))
  235.     }
  236.   }
  237.   $ListView1.AutoResizeColumn(1, 1)
  238.   $ListView1.AutoResizeColumn(0, 2)
  239. }
  240.  
  241. [void]$Form.ShowDialog()

[ You are not allowed to view attachments ][ You are not allowed to view attachments ]

[ You are not allowed to view attachments ][ You are not allowed to view attachments ]
The one marked VBR bit rate is actually 224kHz that's why it's remained.

Still no error checking :P

No progress indicator either  :-[

PS. Forgot to mention it deletes to the Recycle Bin.
Title: Re: Does any folder in tree have more than one file in it?
Post by: wraith808 on February 28, 2019, 11:20 PM
Wow... I write all my forms freehand- I never realized that you could do the same in PowerShell.  I might be writing more scripting than ever now.
Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on February 28, 2019, 11:48 PM
@c.gingerich  Sill the same problem.  See snap of Garth Brooks above.

As an experiment I created a large folder hierarchy/tree structure with NO TWO FILES in any single folder.  mtof.exe flags folders even in this case, if more than one file exists in the mini-sub-hierarchy.

The objective is:  ONLY CALL 911 IF YOU SPOT TWO (OR MORE) BIRDS SITTING **TOGETHER** ON THE SAME SINGLE BRANCH.

Maybe it can't be done.

mtof.exe, though, is still a pretty neat little gem that I do appreciate.
Title: Re: Does any folder in tree have more than one file in it?
Post by: 4wd on March 01, 2019, 12:16 AM
Wow... I write all my forms freehand- I never realized that you could do the same in PowerShell.

Wouldn't really call it "writing freehand" since I just move objects around the POSHGUI editor and then copy out the code - just do a little tweaking and add form options not available in the POSHGUI editor, (eg. the ListView view mode), afterwards.

Could probably have added a column sort routine but once it seemed to work I got lazy  :)
Title: Re: Does any folder in tree have more than one file in it?
Post by: wraith808 on March 01, 2019, 06:52 AM
I meant that the code that poshgui generates looks like just the freehand code.  you can move things around the xaml canvas also, and it generates the same sort of code.  I just find that I have more fine control doing it myself.
Title: Re: Does any folder in tree have more than one file in it?
Post by: c.gingerich on March 01, 2019, 07:58 AM
I think I'll have concede this one. I may go back and see what I can do mid next week, but I don't have any more time to spend on this week. Sorry  :(
Title: Re: Does any folder in tree have more than one file in it?
Post by: highend01 on March 01, 2019, 11:09 AM
Try this...

No threading for the scan, Cancel button is therefore useless atm...
Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on March 01, 2019, 07:07 PM
@c.gingerich.  Hope to see you back, Chris.  Either on this one, or the next.  Thanks for your skilled efforts!
Title: Re: Does any folder in tree have more than one file in it?
Post by: Nod5 on March 02, 2019, 05:04 AM
Not a script but the file search tool Everything supports the syntax to find all folders that contain a specific number of files
Code: Text [Select]
  1. childfilecount:<count>
See https://www.voidtools.com/support/everything/searching/
You can combine that with restricting the search to some base folder and negate the syntax (to show only folders that contain not 1 file) and only list the matching folders in the results view.
Code: Text [Select]
  1. "C:\base folder\" !childfilecount:1 folder:
Title: Re: Does any folder in tree have more than one file in it?
Post by: chashnniel on March 02, 2019, 07:08 AM
This is what TC(with its plugin dirsizecalc) do.
Title: Re: Does any folder in tree have more than one file in it?
Post by: 4wd on March 02, 2019, 05:23 PM
Not a script but the file search tool Everything supports the syntax to find all folders that contain a specific number of files
Code: Text [Select]
  1. childfilecount:<count>
See https://www.voidtools.com/support/everything/searching/
You can combine that with restricting the search to some base folder and negate the syntax (to show only folders that contain not 1 file) and only list the matching folders in the results view.
Code: Text [Select]
  1. "C:\base folder\" !childfilecount:1 folder:

Now that is an excellent idea  :Thmbsup:

Wonder if you can 'and' in a not 0 file count also?
Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on March 02, 2019, 11:50 PM
@Nod5

How about that!  Everything does indeed seem to do the trick.

"M:\Audio 2\" childfilecount:>1 folder:

Sooo many additional options as well.  Never knew.

And, because of drawing upon the index, fast as lightning.

Tentatively may be a winner.



Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on March 02, 2019, 11:56 PM
@4wd

Well, your PowerShell script nailed it.  Wonderful work.

Sorting, as you mentioned above, would not be so important as having the ability to export the list.  (However, nirsoft's SysExporter can indirectly grab the list, I noticed.)

Thanks, 4wd, for your continuing assistance.


Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on March 03, 2019, 12:08 AM
@highend01

You betcha, highend01!  You da man, and, yes, "More than one file.exe" is gold, for the purpose which it was created -- deleting all but the largest file in each folder, over a directory structure.

Now..., if you want to ENHANCE "More than one file.exe".....???

Before cutting out all that deadwood, really best to at least take a sampling of the files being zapped.  Open a few of those folders and see what's what.

That's the reason for the present request.

Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on March 03, 2019, 12:19 AM
A quick note on what the application is with the present request:

Music Collection Maintenance.

I use a program called "Stream Writer" to capture streaming music.  And Media Monkey to maintain the organizing and database of the music.

Because of duplicates in pieces, I'd estimate the best stuff is only 20% of all that's been collected.  No sense in keeping the lower bitrate files, for instance.  And, often there's a "(2)" suffixed to same song, same bitrate.  (See "Wende" snap in original post at top.)

Seems we're not yet there, as far as optimal music collections and maintenance is concerned.

Title: Re: Does any folder in tree have more than one file in it?
Post by: highend01 on March 03, 2019, 07:13 AM
This version can "prune" (delete only the files with the smallest size and keep the one with the largest size) for each found folder...

Apart from that, the window is now resizable, and System Volume Information and $RECYCLE.BIN folders are now left out by default...

Use with care, you aren't asked if you're sure when you click the prune button^^
When the pruning is done, a log with all deleted files is copied to clipboard automatically...
Title: Re: Does any folder in tree have more than one file in it?
Post by: Nod5 on March 03, 2019, 12:52 PM
Wonder if you can 'and' in a not 0 file count also?
Yep, this works
"C:\base folder\" !childfilecount:1 !childfilecount:0
but nkormanik found the shorter
"C:\base folder\" childfilecount:>1

Sooo many additional options as well.  Never knew.
Indeed, Everything just keeps on giving. It is in that sweet spot of having a simple looking UI yet is very rich in features and syntax options. I actually didn't know about the childfilecount: command until I read this thread and thought "I bet Everything has some way or other to do this".  :)

I noticed there is a difference between
"C:\base folder\" !childfilecount:1 !childfilecount:0
and
"C:\base folder\" childfilecount:>1

The former lists both the matching folders and their files, but the latter only lists the folders. This means that there are two different workflows to choose among
1. find the list of matching folders and then manually open matching folders in Explorer one at a time and delete unwanted files.
2. find the list of all *files* in matching folders, sort the Everything list by Path and manually delete unwanted files one at a time directly in Everything.
For workflow 2 the search could be one of these
"C:\base folder\" !childfilecount:1 !childfilecount:0 file:
"C:\base folder\" !childfilecount:1 !childfilecount:0 ext:mp3
"C:\base folder\" !childfilecount:1 !childfilecount:0 audio:
Title: Re: Does any folder in tree have more than one file in it?
Post by: highend01 on March 04, 2019, 03:55 AM
A minor update (fixed a problem with the prune button (disabled or not when no results are found) and with the height of the string + button gadgets at the top)...

Title: Re: Does any folder in tree have more than one file in it?
Post by: 4wd on March 04, 2019, 04:07 AM
Had a fool around with EBO (https://www.donationcoder.com/forum/index.php?topic=47222.msg428118#msg428118) for something to do.

[ You are not allowed to view attachments ]
Title: Re: Does any folder in tree have more than one file in it?
Post by: mouser on March 05, 2019, 10:12 AM
It's wonderful to see these threads with a bunch of people helping each other and coding and sharing stuff  :up:

Don't forget if you appreciate the coders, send them some donationcredits!
Title: Re: Does any folder in tree have more than one file in it?
Post by: rjbull on March 05, 2019, 05:53 PM
The OP mentioned TreeSize.  From idle curiosity, I entered it into AlternativeTo (http://alternativeto.net/) and found WizTree (https://antibody-software.com/web/software/software/wiztree-finds-the-files-and-folders-using-the-most-disk-space-on-your-hard-drive/), which claims to be the fastest of its type and certainly seems like it, much faster than WinDirStat (https://windirstat.net/), but doesn't address the more-than-one-file question.

Also, FolderSizes (https://www.foldersizes.com/), which apparently can:
You can now search for folders based upon the number of files and/or subfolders they contain. This criterion can be based upon the immediate file/folder count, or the aggregate file/folder count (which includes counts from nested subfolders).
But it's a heavy-duty tool - 27MB and $60.

Nir Sofer's SearchMyFiles (http://www.nirsoft.net/utils/search_my_files.html) can show number of files per folder in Summary mode, but you'd still have to eyeball the report, or post-process it.
Title: Re: Does any folder in tree have more than one file in it?
Post by: nkormanik on March 28, 2019, 04:27 AM
@4wd  EBO.  Beautifully accomplished.  Terrific little program.  Amazing skills.

Thank you!

@highend01  Absolutely.  After using 4wd's EBO to make sure what's about to be zapped, time for MTOF to do the pruning.

Great work!

Title: Re: Does any folder in tree have more than one file in it?
Post by: Curt on March 28, 2019, 10:45 AM
A quick note on what the application is with the present request: Music Collection Maintenance.

$35 https://www.bolidesoft.com/audiocomparer/

Find and Remove Duplicate Songs Automatically

Audio Comparer is a simple tool that will help you to automatically find and remove duplicate songs in your collection. The program works with Windows Vista/7/8/10 and can compare audio files by their actual sound data. Audio Comparer listens to your audio files and remembers all of them. After that, it compares how they sound and places similar-sounding files into groups where you can select which file you want to delete and which to leave on your hard drive. This way our program can even detect duplicates with wrong or missed tags filled. Also, Audio Comparer is able to detect the same song stored in different audio formats (for example, FLAC and MP3).
-Bolide Audio Comparer

Also: https://alternativeto.net/software/audio-comparer/