ちんとんがめ♪色々備忘録・・・

なんか、メモ的な感じで使えればいいなみたいな。。。前検索したけど、忘れて同じもの検索するのって面倒だよね?・・・でも、結局検索するみたいな。。。

PowerShellでディレクトリ/ファイル選択するダイアログを表示する。

2種類ある・・・?

■ディレクトリ1つめ(何気に指定したディレクトリ配下しか選択できないやつだったりする)
# ディレクトリ、ファイルの選択ダイアログ表示
$shell = New-Object -com Shell.Application
$bff = $shell.BrowseForFolder(0,"対象ディレクトリを選択してください",0,"C:\test")

# 選択をキャンセルした場合はNULLを返す
if($bff -eq $null){
$targetPath = $null
} else {
$targetPath = $bff.Self.Path
}

Write-Host $targetPath

■ディレクトリ2つめ
# System.Windows.Formsを有効化
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

# 必要な情報を設定
$fbd = New-Object System.Windows.Forms.FolderBrowserDialog
$fbd.Description = "対象ディレクトリを選択してください。"
$fbd.SelectedPath = "C:\test"

# ダイアログを表示する
$target = $fbd.ShowDialog() | Out-Null

# 選択をキャンセルした場合はNULLを返す
if ( $target -eq [System.Windows.Forms.DialogResult]::Cancel) {
$targetPath = $null
} else {
$targetPath = $fbd.SelectedPath
}

Write-Host $targetPath

■ファイル選択
# System.Windows.Formsを有効化
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

# 必要な情報を設定
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = "C:\test"

if ( ( $filter_str -eq $null) -or ($filter_str -eq "")) {
$OpenFileDialog.Title = "ファイルを選択してください。"
} else {
$OpenFileDialog.Title = "ファイルを選択してください。(ファイルの種類:" + $filter_str + ")"
}

# 取得したいファイルだけ取得するようにフィルターかけておく
# (複数拡張子を指定するときは、「;」で区切って後ろにつける)
$OpenFileDialog.filter = "All files (*.*)| *.txt;*.csv"

# ダイアログを表示する
$target = $OpenFileDialog.ShowDialog() | Out-Null

# 選択をキャンセルした場合はNULLを返す
if ($target -eq [System.Windows.Forms.DialogResult]::Cancel) {
$targetPath = $null
} else {
$targetPath = $OpenFileDialog.filename
}

Write-Host $targetPath