2020年6月23日火曜日

【PowerShell】OpenFileDialogでフォルダ選択をする

PowerShellでフォルダやディレクトリ選択をしたい時、調べてよく出てくるのは「FolderBrowserDialog」ですよね。
ツリー表示が苦手なのとドライブの移動がフォーム上でできず困ったので、通常ファイル選択で利用する「OpenFileDialog」でフォルダ選択できるよう考えてみました。


サンプルコード


# System.Windows.Formsアセンブリを有効化
[void][System.Reflection.Assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")

# OpenFileDialogクラスをインスタンス化し、必要な情報を設定
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.InitialDirectory = "C:\"
$dialog.Title = "フォルダを選択してください"
$dialog.ValidateNames = 0 # falseに設定
$dialog.CheckFileExists = 0 # falseに設定
$dialog.CheckPathExists = 1 # trueに設定

# 常に表示されるファイル名(なんか文字数制限ある感じになってしまった・・・)
$dialog.FileName = "フォルダを選択"

# ダイアログを表示
if($dialog.ShowDialog() -eq "OK"){
  # [OK]ボタンがクリックされたら、選択されたファイル名(パス)を表示

  # 今のままだと[パス]/フォルダを選択というパスになってしまうので親要素だけを切り出し
  $folderPath =  Split-Path -Parent $dialog.FileName

  [System.Windows.Forms.MessageBox]::Show($folderPath + " が選択されました。", "できたよ")

}



すこし無理やり感があるのですがポイントは4つです。
$dialog.ValidateNames = 0 # falseに設定
$dialog.CheckFileExists = 0 # falseに設定
$dialog.CheckPathExists = 1 # trueに設定
$dialog.FileName = "フォルダを選択"

これらを書くことによりファイルが選択できなくなります。
FileNameを設定してしまっているため、返ってくるパスにFileNameがくっついてきてしまうので、フォルダパスだけを取得したいときは
$folderPath =  Split-Path -Parent $dialog.FileName
で親要素だけ取得してあげましょう。


参考
https://stackoverflow.com/questions/11624298/how-to-use-openfiledialog-to-select-a-folder
https://www.codeproject.com/Articles/44914/Select-file-or-folder-from-the-same-dialog

2019年12月29日日曜日

ファイル名一覧取得ツールを作ってみよう!

あれ?あのファイル、どこに保存したっけ・・・

たまにしか見ないファイル、どこに保存してあるかわからなくなってしまうことってありませんか?
特にマトリョーシカみたいにファイルの中のファイルの中のファイルの中にあったり・・・。
探すのって一苦労ですよね。
ファイルの検索を使うと時間がかかってしまったり、そもそも探しているファイル名があいまいだと検索すらできなかったり・・・。
このような問題を解消すべく、あるパスを指定したらその中にあるファイル名一覧を取得するツールを作成しました!
よろしければご利用ください!

-----------------------------------------------------
# フォルダ選択ダイアログ

# COMオブジェクトの読み込み
$shell = New-Object -com Shell.Application

# ダイアログを表示し、結果を変数folderPathに格納する
$folderPath = $shell.BrowseForFolder(0,"ファイル名一覧を取得したいフォルダーを選択してください",0,"C:\")

# キャンセルを選択した場合は終了
if ( $folderPath -eq $null){exit}

#  $folderPath内の情報のうち、パス情報のみを変数PATHに格納する
$PATH = $folderPath.Self.Path

# サブフォルダ配下まで再帰的に取得する
Get-ChildItem -Recurse -Path $PATH

# 格納したパスをメッセージボックスで表示
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show($PATH,"ファイル一覧を取得しました")

Read-Host "続けるには Enter キーを押してください..." 
-----------------------------------------------------

2019年12月28日土曜日

プログラミングを学んでいなくてもOK!PowerShellを使ってみよう!

その作業、自動化できたらラクじゃない?


いつもお仕事お疲れさまです!
毎日のように行っている、その仕事・・・。
一部分だけでも自動化できたらラクだと思いませんか?

Windows10に標準で搭載されているPowerShellというツールを使い、
わたしと一緒にあなたのお仕事を自動化していきましょう!

自動化ってどうやるの?
難しい知識が必要なのでは?
プログラミングやったことないけど大丈夫?

たくさん不安があると思います。
しかし、現役SEのわたしが営業や事務などプログラミング経験が全く無いような方に向けてなるべく細かく丁寧に書いていくのでご安心ください!


【PowerShell】OpenFileDialogでフォルダ選択をする

PowerShellでフォルダやディレクトリ選択をしたい時、調べてよく出てくるのは「FolderBrowserDialog」ですよね。 ツリー表示が苦手なのとドライブの移動がフォーム上でできず困ったので、通常ファイル選択で利用する「OpenFileDialog」でフォルダ選択で...