8

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

4

4 回答 4

8

如果您有 .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 to a similar question about .NET。


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

于 2015-01-29T14:42:09.597 回答
7

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

但是,那里有第三方文件类型猜测程序,它们实际上会查看文件的内容。

这个问题在 SuperUser 上有一个非常好的答案。最重要的建议包括File for WindowsTrID

于 2012-07-28T05:33:08.217 回答
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

-乔

于 2012-10-24T16:46:13.057 回答
1
$ext = ".exe"
$null = New-PSDrive HKCR Registry HKEY_CLASSES_ROOT -ea 0
$mime = (gp HKCR:$ext)."Content Type"
write-host $ext $mime
于 2017-09-09T16:39:03.223 回答