powershellでファイルパスを指定して実行する方法は分かりました。
もっと使いやすくできないかな?と思っているとなんとpowershellにもUIがあるというじゃないですか!!
そこでファイルをドラッグ&ドロップで指定できるようにやってみました!
PowershellのUIでドラッグ&ドロップを実装
Poweshellには多彩なUIが実装されているんですね。
今回はその中でも「ドラッグ&ドロップできるエリア」を使用してみたいと思います。
下記サイトを参考にさせていただきました!と言ってもまるまるコピペです笑
letspowershell.blogspot.jp
Add-Type -AssemblyName System.Windows.Forms $form = New-Object System.Windows.Forms.Form #formのサイズ $form.Size = "500,300" $form.StartPosition = "CenterScreen" $form.Text = "タイトル" #リストボックスの生成 $Listbox = New-Object System.Windows.Forms.ListBox $Listbox.Location = "10,10" #リストボックスのサイズ $Listbox.Size = "470,200" #ドラッグ&ドロップを許可 $Listbox.AllowDrop = $True # ドラッグエンター イベント $Enter = { $_.Effect = "ALL" #write-host "このタイミングです!!" } #addしないとドラッグできない $Listbox.Add_DragEnter($Enter) #ドラッグドロップ イベント $Drop = { $Name = @($_.Data.GetData("FileDrop")) #1つずつ取得し、リストボックスに追加 For ( $i = 0 ; $i -lt $Name.Count ; $i++ ) { $Listbox.Items.Add($Name[$i]) } } #addしないとドロップできない $Listbox.Add_DragDrop($Drop) #開始ボタン $Button = New-Object System.Windows.Forms.Button $Button.Location = "200,220" $Button.size = "80,30" $Button.text = "開始" $Button.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.Controls.AddRange(@($Listbox,$Button)) $Form.Showdialog()
これで、ドラッグエリアが表示されるので、ドロップしたファイルのパスを取得することができます。
この実装によりファイルパスの取得が楽になりました。
取得したファイルパスを利用する
ドロップしたファイルパスは$Listboxに格納されていきます。
なのでこれを使用してファイルをオープンなど使用しています。
#ドロップしたExcelファイル1を開く $path = $Listbox.Items[0] $excelFile1 = $excel.Workbooks.Open($path) #ドロップしたExcelファイル2を開く $path2 = $Listbox.Items[1] $excelFile1= $excel.Workbooks.Open($path2)
UIを実装したときはPowershell ISEから実行してください。
powershellコンソールや右クリックの「powershellで実行」をするとエラーになります。
原因は実行時のシングルスレッド(STA)とマルチスレッド(MTA)の違いなんですが、それはまた次回ということで~。
解決編はこちら⇒【Powershell】シングルスレッドとマルチスレッド対応による実行時のエラーについて
まとめ
powershellのUIを使用するとファイルのパスをドラッグ&ドロップで取得することができる。
ただしこのままだとPowershell ISEから実行しないとエラーになるので注意です。