Powershell中不同的文件类型列表

Lup*_*uss 23 powershell

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

到目前为止我有这个:

Get-ChildItem D:\Audio -Recursive | Select-Object PSParentPath, Extension | Export-Csv D:\Test.csv
Run Code Online (Sandbox Code Playgroud)

但是,我想做得更好,并为每个文件夹显示每个找到的扩展只有一次.

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

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

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

Jim*_*meh 38

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

Get-Childitem -Recurse | Select-Object PSParentPath,Extension -Unique
Run Code Online (Sandbox Code Playgroud)

(另外,DirectoryName可能比PSParentPath更好)

  • @ D3vtr0n是的,我个人把它写成`ls -rec | 选择PSParentPath,Extension -u`,但在回答问题时我会回避别名. (7认同)
  • @ D3vtr0n人类可读,而不是PowerShell专家.这是一个相当小的问题,但是发布的代码,特别是用于教学目的时,应该使用完整的命令行开关名称,而不是别名,就像Jimmeh在这里所做的那样.他在回答问题时回避使用别名是完全正确的(除非问题恰好要求别名),并且你建议他用别名替换完整的命令行开关名称和参数是不正确的. (4认同)
  • 因为它是一个单行,我会建议"gci"而不是"get-childitem".它只是更短.另外,"-Recurse"可以是"-rec". (2认同)
  • @ D3vtr0n缩短行的建议更短,是的,但可读性也差得多。我更喜欢Jimmeh的原始答案,其中包含完整的cmdlet名称和参数。 (2认同)
  • @ D3vtr0n那不遵循(虽然我承认我上次评论的第一句话并没有精心制作),并且附带于主要观点,我认为你终于理解了这一点,因为你改变了主题而不是进一步争论它. (2认同)
  • @Jimmeh 感谢您在回答问题时使用长格式,当开发人员开始看到“长格式”并认识到他们可以在以后随意使用别名时,这很有帮助。 (2认同)

Esp*_*o57 5

我完成了吉姆的解决方案,使用-file只取文件

Get-ChildItem "c:\temp" -Recurse -file | select directoryname, Extension -Unique
Run Code Online (Sandbox Code Playgroud)

  • 准备“-File”键:)因为我有很多“aaa.bbb”文件夹,它们会产生大量错误的扩展名。 (2认同)