获取文件扩展名的文件类型说明



我为磁盘上的数据使用情况做报告,我从所有选定的属性中获取信息,如名称、路径、大小......代表一个文件说明,对于每个扫描的文件,此属性为空。例如,当您在Windows资源管理器中选择一个文件并在常规选项卡中选择属性时,您可以看到"文件类型",此处对于Excel文件,文件类型为"Microsoft Excel工作表(.xlsx)"。

gci c:file | select *

如何获取此信息?

我喜欢

尽可能避免外部程序,所以我建议使用注册表。

$ext = ".xlsx"   
$desc = (Get-ItemProperty "Registry::HKEY_Classes_root$((Get-ItemProperty "Registry::HKEY_Classes_root$ext")."(default)")")."(default)"
$desc
Microsoft Excel-regneark   #Norwegian description

要将其与Select-Object一起使用,您可以像这样修改它:

#You could define this inside Select-Object too, but it's a bit long so I extracted it first to clean up the code.
$extensiondesc = @{n="ExtensionDescription";e={ (Get-ItemProperty "Registry::HKEY_Classes_root$((Get-ItemProperty "Registry::HKEY_Classes_root$($_.Extension)")."(default)")")."(default)" }}
Get-ChildItem |
Select-Object Extension, $extensiondesc
Extension ExtensionDescription
--------- --------------------
.oxps     XPS Document
.lnk      Shortcut
.txt      Text Document 

假设$ext具有文件的扩展名。

例如-

$ext = ".bmp"

如果已注册,以下代码将为您提供说明(如果适合您的方案,您应该添加更好的错误处理)-

$desc = (cmd /c assoc $ext).Split("=")[1]
$desc = (cmd /c assoc $desc).Split("=")[1]
Write-Host $desc

AFAIK,Powershell没有任何内置机制来获取此信息,因此使用Powershell的cmd是最便宜,最简单的解决方案恕我直言。

您可以使用Shell.Application对象的GetDetailsOf()方法:

$app = New-Object -COM 'Shell.Application'
$f   = Get-Item 'C:pathtoyourfile'
$dir = $app.NameSpace($f.Directory.FullName)
$description = $dir.GetDetailsOf($dir.ParseName($f.Name), 2)

我刚刚即兴创作了 Frode F 的解决方案,添加了一个带有唯一条目的排序列表,使其更易于阅读。

$extensiondesc = @{n="ExtensionDescription";
e={(Get-ItemProperty "Registry::HKEY_Classes_root$((Get-ItemProperty "Registry::HKEY_Classes_root$($_.Extension)")."(default)")")."(default)" }}
Get-ChildItem |
Select-Object -unique Extension, $extensiondesc |Sort-Object @{e="Extension";Ascending=$true},@{e="ExtensionDescription";Ascending=$false} 

最新更新