2015-06-10

PowerShellでファイル選択ダイアログを使用する

第4回は「ファイル選択ダイアログFile selection dialog)」を取り上げます。

前回は「フォルダ選択ダイアログ」を取り上げました。
⇒ [第3回] PowerShellでフォルダ選択ダイアログを使用する


では早速、基本型を記述します。
 
---------ここから-------------------------------------------------------------------------------------

# アセンブリの読み込み
Add-Type -Assembly System.Windows.Forms

# ファイル選択ダイアログのオブジェクト取得
$dialog = New-Object System.Windows.Forms.OpenFileDialog

# フィルタ条件の設定
$dialog.Filter = 'テキストファイル|*.txt|Csvファイル|*.csv'

# タイトルの設定
$dialog.Title = "ファイルを選択してください"

# ヘルプの設定
$dialog.ShowHelp = $true;

# デフォルト選択ディレクトリの設定
$dialog.InitialDirectory = 'C:\'

# 選択したファイルのパスを変数PATHに格納する
if ($dialog.ShowDialog() -eq "OK") {
    $PATH = $dialog.FileName
} else {
    $PATH = '選択なし。'
}


# 格納したパスをメッセージボックスで表示
[System.Windows.Forms.MessageBox]::Show($PATH,"処理完了")

 
---------ここまで-------------------------------------------------------------------------------------

上の内容をコピーして、PowerShell ISEを起動し、貼り付けたあと、[スクリプトを実行(F5)]を押してみてください。

まず始めに、下の画像のようなダイアログが表示されます。
(フォルダ構成はお使いのPCによって異なります)



例として、この中から「AAA」フォルダを選択し、「開く」を押します。


「AAA」フォルダ内にあるテキストファイルを選択し、「開く」を押します。


このように、選択したファイルのパスがメッセージボックスで表示されます。

※メッセージボックスについては[第1回] PowerShellでMessageBoxを使用するを参照してください。


それでは、 1行ずつ解説していきます。

◆1行目
Add-Type -Assembly System.Windows.Forms

1行目では、ダイアログを使用するための前準備としてアセンブリを読み込んでいます。
この一文を先に記述していないと、ダイアログが使用できないので忘れないようにしてください。


◆2行目
$dialog = New-Object System.Windows.Forms.OpenFileDialog

2行目では、OpenFileDialogクラスを読み込み、変数dialogに格納しています。

これも深く考える必要はありません。
1行目と同じく、必須行として覚えておいてください。
なお、変数は任意の文字に変更して構いません。


◆3行目
$dialog.Filter = 'テキストファイル|*.txt|Csvファイル|*.csv'

3行目では、選択するファイルにフィルターを設定し、テキストファイルかCsvファイルのみが選択可能な状態としています。

このフィルター設定の記述方法にはコツがあります。
例えば、PDFファイルは「*.pdf」、JPEGファイルは「*.jpeg」と記述するのですが、拡張子に関係なく全てのファイルを表示させたい場合は「*.*」と記述します。

さらに、Excelファイルのような、複数の拡張子を持つファイルについてはワイルドカードを使用し「*.xls*」のように記述します。

こうすることで、xls、xlsx、xlsm等も表示させることができます。


◆4行目
$dialog.Title = "ファイルを選択してください"

4行目は、ダイアログのタイトル部分に表示する文字列の設定です。


◆5行目
$dialog.ShowHelp = $true

5行目ではヘルプの設定をTrueにしています。
これは、ダイアログを表示させた時にヘルプボタンを表示させるかどうかを決める文です。

この一文がないと、スクリプトファイル(拡張子ps1)として保存し、右クリック→実行した際にダイアログが表示されない現象が発生する場合があります。
(PowerShell ISE上ではダイアログが表示されるが、ps1ファイルを右クリック→実行したときにはダイアログが表示されない)

これを突き止めるのに、Google先生のお力を借りました。
どうやら、PowerShellのバージョンが関係している(かも?)ようです。
私の環境では、バージョン2.0では表示されず、4.0では表示されました。

なので、念のため、記述しておくことをお勧めします。


◆6行目
$dialog.InitialDirectory = 'C:\'

6行目では、ダイアログを表示させた時に、デフォルトでどのフォルダを表示させるかの設定を行っています。

例文ではCドライブの直下にしましたが、いろいろ設定することが可能です。
例えばデスクトップに設定したい場合は
$dialog.InitialDirectory = 'C:\users\ユーザ名\desktop\' と記述します。

豆知識ですが、
$dialog.InitialDirectory = '.'
と記述すれば、そのスクリプトファイルがある階層と同階層を表し、
$dialog.InitialDirectory = '..'
と記述すれば、スクリプトファイルがある階層のひとつ上の階層を表します。


◆7行目
if ($dialog.ShowDialog() -eq "OK") {
    $PATH = $dialog.FileName
} else {
    $PATH = '選択なし。'
}

7行目ではif文を用いて、ダイアログ上で「OK」ボタンが押された場合は、そのファイルのパスを変数PATHに格納し、「OK」以外のボタン(=キャンセルボタン)が押された場合は変数PATHに「選択なし」の文字列を格納するようにしています。


◆8行目
[System.Windows.Forms.MessageBox]::Show($PATH,"処理完了")
8行目では、変数PATHに格納されたパスもしくは文字列をメッセージボックスで表示しています。
※メッセージボックスについては[第1回] PowerShellでMessageBoxを使用するを参照してください。


以上で、ファイル選択ダイアログについての解説は終わりです。

◆5行目の部分で記述しましたが、もしスクリプトファイルがうまく実行できない場合は、お使いのPowerShellのバージョンを今一度ご確認ください。
※「$PSVersionTable」と入力すれば、バージョン情報が確認できます。


=======================================================================
本投稿は筆者が独自に調査したものを投稿しておりますので、間違い等もあるかと思います。
本投稿に関する疑問や質問には可能な限りお答えいたします。
また、反対にアドバイス等がございましたら、ぜひご連絡をお願い致します。
=======================================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=======================================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/