Home > Windows にまつわる e.t.c.

PowerShell で拡張子から関連付けられているプログラムのフルパスを取得する


Windows 環境では拡張子にプログラムを関連付けてファイルをダブルクリックでプログラムを起動できます。
Windows 10 GUI だと、[設定]-[アプリ]-[既定のアプリ]-[ファイルの種類ごとに規定のアプリを選ぶ] で設定変更できるやつです。

これをコマンドラインで取得するには assoc コマンドと ftype コマンドを組み合わせで取得する必要があるのですが、2つのコマンドを組み合わせるのが面倒なので PowerShell の関数でラッピングしてみました。

###################################################
# 拡張子から関連付けられたプログラムを得る
###################################################
function GetExt2App([string]$Ext){
    # ピリオドが入っていなかったら補う
    if($Ext[0] -ne "."){
        $Ext = "." + $Ext
    }

    # 関連付けられた内部情報
    $TempBuffer = cmd /c assoc $Ext
    if( $LastExitCode -ne 0 ){
        return $null
    }

    # シェルハンドリングの場合は Null を返す
    if( $TempBuffer -like "*file"){
        return $null
    }

    # 情報を得られなかった場合は Null を返す
    $TempInfo = $TempBuffer.Split("=")
    if( $TempInfo.Count -ne 2 ){
        return $null
    }

    # ftype に渡す内部情報
    $InternalInfo = $TempInfo[1]

    # 関連付けられたプログラム
    $TempBuffer = cmd /c ftype $InternalInfo
    $TempInfo = $TempBuffer.Split("=")

    # 情報を得られなかった場合は Null を返す
    if( $TempInfo.Count -ne 2 ){
        return $null
    }

    # プログラムとオプション
    $TempBuffer = $TempInfo[1]

    # プログラム名だけにする
    if( $TempBuffer -match  "^`"(?.+?)`"" ){
        $ExeInfo = $Matches.ExeInfo
    }
    return $ExeInfo
}

 

関連情報

関数を PowerShell プロンプトで実行する
http://www.vwnet.jp/windows/PowerShell/2016100401/UseFunctionInPsPrompt.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.