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

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

【问题讨论】:

    标签: .net powershell


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

    【讨论】:

    • 请详细说明您的答案(告诉我们什么问题是什么,以及如何此代码解决了该问题)。纯代码答案缺乏教育意义且用途有限。
    • 您应该为代码提供更多上下文/解释,特别是因为已经有几个高质量的答案。请阅读网站tourHow 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 WindowsTrID

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 2013-04-03
      • 2021-01-17
      • 2012-03-16
      • 2016-05-23
      • 2014-05-31
      • 2021-09-13
      • 2012-02-02
      • 2012-01-25
      相关资源
      最近更新 更多