Отдельный список типов файлов в Powershell

Я пытаюсь написать однострочный слой в Powershell, в котором перечислены все типы файлов в папке (и ее подпапках).

У меня это до сих пор:

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

Однако я хотел бы сделать лучше и отобразить для каждой папки каждое найденное расширение только один раз.

Например, скажем, у меня есть десять mp3 файлов и 1 файл jpg в D:\Audio\foo и 5 файлах flac и 1 txt файл в D:\Audio\bar. Я хотел бы, чтобы результат был:

  • foo.mp3
  • foo.jpeg
  • bar.flac
  • bar.txt

Я предполагаю, что я должен использовать Get-Unique, но как я могу указать его в свойстве Extension и NOT на свойстве Path?

Ответы

Ответ 1

Просто добавьте -Unique в Select-Object:

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

(Кроме того, DirectoryName может быть лучше, чем PSParentPath здесь)

Ответ 2

i завершено решение Jimmeh, используйте -file для получения только файла

Get-ChildItem "c:\temp" -Recurse -file | select directoryname, Extension -Unique

Ответ 3

Попробуйте следующее:

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"}