PowerShell:可以确定文件的 MIME 类型吗?

Posted

技术标签:

【中文标题】PowerShell:可以确定文件的 MIME 类型吗?【英文标题】:PowerShell: Possible to Determine a File's MIME Type? 【发布时间】:2012-07-26 18:21:25 【问题描述】:

PowerShell 是否可以确定给定文件的类型是什么?例如,如果我将路径 C:\Foo.zip 传递给它,我是否可以让它确定该路径处的文件实际上是一个 zip 文件而不是其他文件?

【问题讨论】:

【参考方案1】:
$ext = ".exe"
$null = New-PSDrive HKCR Registry HKEY_CLASSES_ROOT -ea 0
$mime = (gp HKCR:$ext)."Content Type"
write-host $ext $mime

【讨论】:

请详细说明您的答案(告诉我们什么问题是什么,以及如何此代码解决了该问题)。纯代码答案缺乏教育意义且用途有限。 您应该为代码提供更多上下文/解释,特别是因为已经有几个高质量的答案。请阅读网站tour 和How to Answer。【参考方案2】:

如果你有.NET 4.5+,你可以使用静态方法System.Web.MimeMapping.GetMimeMapping

> Add-Type -AssemblyName "System.Web"
> [System.Web.MimeMapping]::GetMimeMapping("C:\foo.zip")
application/x-zip-compressed

感谢this answer 对有关 .NET 的类似问题。


编辑:误读了问题。 GetMimeMapping通过扩展返回MIME类型,不分析内容。

【讨论】:

不幸的是,PowerShell 6 似乎不再支持这一点。【参考方案3】:

您可以从注册表中获取 mime 类型。不幸的是,HKEY_CURRENT_USER 配置单元没有自动映射为驱动器,因此您必须先签入。

function Get-MimeType()

  param($extension = $null);
  $mimeType = $null;
  if ( $null -ne $extension )
  
    $drive = Get-PSDrive HKCR -ErrorAction SilentlyContinue;
    if ( $null -eq $drive )
    
      $drive = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
    
    $mimeType = (Get-ItemProperty HKCR:$extension)."Content Type";
  
  $mimeType;

这是一个示例用法

PS> Get-MimeType -extension .zip
application/x-zip-compressed

-乔

【讨论】:

这实际上并不测试目标文件的内容,它只是读取扩展名并从操作系统中查找文件类型关系。【参考方案4】:

PowerShell 与 Windows 操作系统的其他部分一样,只是根据扩展名猜测文件类型。

但是,有第三方文件类型猜测程序,可以实际查看文件的内容。

有一个truly excellent answer to this question over on SuperUser。热门推荐包括File for Windows 和TrID。

【讨论】:

以上是关于PowerShell:可以确定文件的 MIME 类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

404.17请添加显式mime

确定我正在下载的文件的 MIME 类型 [重复]

如何从 Java 中的 MIME 类型确定适当的文件扩展名

Powershell 检查 MIME 是不是存在于 IIS 中

在没有 MIME 或扩展名的 PHP 中确定文件类型

如何在 PowerShell 中使用 S/MIME 对消息进行签名和加密