ファイルを開くダイアログを表示する
.NET Framework の OpenFileDialog を PowerShell から作成して表示する方法を紹介します。
ファイルダイアログを開く初期ディレクトリを設定する InitialDirectory メンバは、Windowsパス区切りしか指定できません。UNIXパス区切りの場合は初期ディレクトリの設定に失敗します。
c:\tmp ならば正しく動きます。
c:/tmp だとうまく動きません。
単一のファイルを選ぶ場合は Multiselect メンバを $false にします。これはデフォルト動作です。
複数のファイルを選ぶ場合は Multiselect メンバを $true にします。
単一のファイルを選択する
[void][System.Reflection.Assembly]::LoadWithPartialName( "System.Windows.Forms" )
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "Bitmap|*.bmp|Png|*.png|Jpeg|*.jpg|All|*.*"
$ofd.InitialDirectory = "C:\tmp" #UNIX区切りでは正しく動かない.
$ofd.Title = "Open"
# 単一ファイルの選択はデフォルト動作なので明示する必要はない.
# $ofd.Multiselect = $false
# ダイアログを表示する.
$ret = $ofd.ShowDialog()
# 戻り値を評価する.
if( $ret -eq [System.Windows.Forms.DialogResult]::OK )
{
Write-Output ( $ofd.FileName )
}
else
{
Write-Output ( "Canceled." )
}
下記が実行結果です。
C:\tmp\this_is_08.bmp
複数のファイルを選択する
[void][System.Reflection.Assembly]::LoadWithPartialName( "System.Windows.Forms" )
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "Bitmap|*.bmp|Png|*.png|Jpeg|*.jpg|All|*.*"
$ofd.InitialDirectory = "C:\tmp" #UNIX区切りでは正しく動かない.
$ofd.Title = "Open"
# 複数選択を許可する.
$ofd.Multiselect = $true
# ダイアログを表示する.
$ret = $ofd.ShowDialog()
# 戻り値を評価する.
if( $ret -eq [System.Windows.Forms.DialogResult]::OK )
{
# こちらは FileName's'であることに注目せよ.
Write-Output ( $ofd.FileNames )
}
else
{
Write-Output ( "Canceled." )
}
下記が実行結果です。
C:\tmp\this_is_08.bmp
C:\tmp\this_is_08_ex.bmp
C:\tmp\this_is_08_exx.bmp