拡張子からMIMEタイプを検索するスクリプト

PoweShell コンピュータ
PowerShell

ファイルを絞り込む際、拡張子が.jpgがJPEGファイルだと決め打ちをしていると拡張子が.jpegのファイルを取りこぼすことがあります。この場合は検索条件を正規表現で-match "\.jp(e)?g"とすればよいですが、正規表現を使えない場合は、条件式を拡張子の数分だけ増やしorでつなぐ必要があります。そもそもJPEGファイルの拡張子はどれほどの種類があるか調べるのも一苦労です。そこで拡張子からMIMEタイプを調べるスクリプトを書いてみました。

スクリプト

<#
.SYNOPSIS
 拡張子からMIMEを取得
 <CommonParameters> はサポートしていません

.DESCRIPTION
 レジストリを検索してMIMEを取得します。

.EXAMPLE
 Get-MimeFromExtension ".htm"
 text/html

.PARAMETER Extension
 拡張子

.LINK
 http://maywork.net/
#>

function Get-MimeFromExtension
{
    param(
        [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
        [string]
        $Extension
    )
    begin {
        # Write-Host "Get-MimeFromExtension begin"

        if (-not(Test-Path "HKCR:\")) {
            # HKCR登録
            New-PSDrive `
                -Name HKCR `
                -PSProvider Registry `
                -Root HKEY_CLASSES_ROOT | Out-Null
        }
    }

    process {
        # Write-Host "Get-MimeFromExtension process"

        $regPath = ("HKCR:\{0}" -f $Extension)

        if (-not(Test-Path $regPath)) {
            return
        }

        $s = Get-ItemProperty -LiteralPath $regPath
        $s."Content Type"
    }
    end {}
}
if (-not($MyInvocation.PSCommandPath)) {
    Get-MimeFromExtension ".jpeg"
}

結果

image/jpeg

.jpgだろうと.jpegだろうとimage/jpegが返ってきますので、この値で絞り込めば取りこぼしが無くなります。

コメント