26

我正在尝试在 Powershell 中编写一个单行代码,其中列出了文件夹(及其子文件夹)中的所有文件类型。

到目前为止我有这个:

Get-ChildItem D:\Audio -Recursive | Select-Object PSParentPath, Extension | Export-Csv D:\Test.csv

但是,我想做得更好,并且对于每个文件夹,每个找到的扩展名只显示一次。

例如,假设我在 D:\Audio\foo 中有 10 个 mp3 文件和 1 个 jpg 文件,在 D:\Audio\bar 中有 5 个 flac 文件和 1 个 txt 文件。我希望输出为:

  • 富.mp3
  • 富.jpeg
  • 酒吧.flac
  • 酒吧.txt

我想我应该使用 Get-Unique 但是如何在 Extension 属性上而不是在 Path 属性上指定它?

4

3 回答 3

44

只需将 -Unique 添加到 Select-Object:

Get-Childitem -Recurse | Select-Object PSParentPath,Extension -Unique

(此外,DirectoryName 在这里可能比 PSParentPath 更好)

于 2012-12-18T04:50:24.023 回答
12

我完成了 Jimmeh 的解决方案,使用 -file 仅获取文件

Get-ChildItem "c:\temp" -Recurse -file | select directoryname, Extension -Unique
于 2017-01-29T10:04:20.463 回答
0

试试这个:

Get-ChildItem D:\Audio -Recurse | Group-Object psparentpath, extension | ? {(($_.Name -split ", .")[1]) -ne $Null } | ft -AutoSize @{Expression={(($_.Name.Split("\"))[$_.Name.Split("\").Length -1] -split ",")[0]};Label="Folder"}, @{Expression={($_.Name -split ", .")[1]};Label="Extension"}

要显示文件夹 + 扩展名的完整路径,请尝试以下操作。

Get-ChildItem D:\Audio -Recurse | Group-Object psparentpath, extension | ? {(($_.Name -split ", .")[1]) -ne $Null } | ft -AutoSize @{Expression={($_.Name.Replace("Microsoft.PowerShell.Core\FileSystem::","") -split ", .")[0]};Label="Folder"}, @{Expression={($_.Name -split ", .")[1]};Label="Extension"}
于 2012-12-17T20:58:01.330 回答