Linux "uniq -d" command equivalent for PowerShell?

I try to write a script in PowerShell which finds files that have same names. After that I want to know how many duplicate names of group that files. I succeded to finding files like that:

foreach ($i in Get-ChildItem *.)
{
    Write-Host (Get-ChildItem $i).BaseName
}

But after that I need a command like in Linux cat file | sort | uniq -d. This -d parameter is my goal in PS.

I tried following command, but doesn't work:

$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count

# Let's say there are files '1.mp4,1.mkv,2.mp4'
# I want variable var's value is 1, because only one group that has same file names


Solution 1:

This should do what you need,

$var = Get-ChildItem | Group-Object -Property BaseName | Where-Object { $_.Count -gt 1} | Select-Object -ExpandProperty Name 

Solution 2:

I tried following command, but doesn't work:

$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count

# I want variable var's value is 1, because only one group that has same file names

The other answer by jfrmilner stores the BaseName in var not the count as you have requested in the question.

The following command stores the count (number of distinct sets of files sharing a command BaseName) in var, which may be a more useful general command:

 $var = (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count

Example 1 - One set of files sharing a common basename (test)

> Get-ChildItem


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       12/02/2020     12:18           1272 test.txt
-a----       16/02/2020     17:51             72 test.cmd
-a----       19/11/2019     21:50             19 output.txt
-a----       08/12/2019     18:47            119 GetBits.cmd
-a----       31/12/2019     14:31       26876158 SystemEvents.xml
-a----       08/01/2020     21:30            845 notepad++ regexp answer template.txt
-a----       12/02/2020     11:00          17755 usb.csv
-a----       01/03/2020     10:05            264 index.jpg
-a----       01/03/2020     10:09            264 New.txt


> (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
1
>

Example 2 - Two sets of files sharing a common basename (test and New)

> Get-ChildItem


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       12/02/2020     12:18           1272 test.txt
-a----       16/02/2020     17:51             72 test.cmd
-a----       19/11/2019     21:50             19 output.txt
-a----       08/12/2019     18:47            119 GetBits.cmd
-a----       31/12/2019     14:31       26876158 SystemEvents.xml
-a----       08/01/2020     21:30            845 notepad++ regexp answer template.txt
-a----       12/02/2020     11:00          17755 usb.csv
-a----       01/03/2020     10:05            264 index.jpg
-a----       01/03/2020     10:09            264 New.txt
-a----       08/03/2020     15:35              0 1
-a----       08/03/2020     15:52              0 New.xxx


> (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
2
>