ファイルを絞り込む際、拡張子が.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
が返ってきますので、この値で絞り込めば取りこぼしが無くなります。
コメント