【发布时间】:2012-07-26 18:21:25
【问题描述】:
PowerShell 是否可以确定给定文件的类型是什么?例如,如果我将路径 C:\Foo.zip 传递给它,我是否可以让它确定该路径处的文件实际上是一个 zip 文件而不是其他文件?
【问题讨论】:
标签: .net powershell
PowerShell 是否可以确定给定文件的类型是什么?例如,如果我将路径 C:\Foo.zip 传递给它,我是否可以让它确定该路径处的文件实际上是一个 zip 文件而不是其他文件?
【问题讨论】:
标签: .net powershell
$ext = ".exe"
$null = New-PSDrive HKCR Registry HKEY_CLASSES_ROOT -ea 0
$mime = (gp HKCR:$ext)."Content Type"
write-host $ext $mime
【讨论】:
如果你有.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类型,不分析内容。
【讨论】:
您可以从注册表中获取 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
-乔
【讨论】:
PowerShell 与 Windows 操作系统的其他部分一样,只是根据扩展名猜测文件类型。
但是,有第三方文件类型猜测程序,可以实际查看文件的内容。
有一个truly excellent answer to this question over on SuperUser。热门推荐包括File for Windows 和TrID。
【讨论】: