我尝试在 PowerShell 中编写一个脚本来查找具有相同名称的文件。之后,我想知道该文件组中有多少个重复的名称。我成功找到了这样的文件:
foreach ($i in Get-ChildItem *.)
{
Write-Host (Get-ChildItem $i).BaseName
}
但之后我需要一个像在Linux中的命令cat file | sort | uniq -d
。这个-d
参数是我在PS中的目标。
我尝试了以下命令,但没有作用:
$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
答案1
这应该可以满足你的需要,
$var = Get-ChildItem | Group-Object -Property BaseName | Where-Object { $_.Count -gt 1} | Select-Object -ExpandProperty Name
答案2
我尝试了以下命令,但没有作用:
$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count
# 我希望变量 var 的值为 1,因为只有一个组具有相同的文件名
jfrmilner 的另一个答案将其存储BaseName
在var
不是正如您在问题中所要求的那样。
以下命令将计数(共享命令 BaseName 的不同文件集的数量)存储在中var
,这可能是更有用的通用命令:
$var = (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
示例 1 - 一组共享公共基名的文件(测试)
> 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
>
示例 2 - 两组共享一个公共基名的文件(测试和新)
> 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
>