パワーシェルで複数条件ファイル検索ツールを作ろう【GUIアプリ応用編】


大量のファイルの中から「特定の文字列を含む名前」「特定の拡張子」「更新日が新しいもの」などを探すのって、地味に面倒ですよね。今回は、**PowerShellで作れる「複数条件でファイル検索ができるGUIアプリ」**を紹介します。


このアプリでできること

  • 任意のフォルダを対象に
  • ファイル名のキーワードで検索
  • 拡張子を指定して絞り込み
  • 結果を一覧表示し、ダブルクリックで開ける

スクリプトの内容(基本バージョン)

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# フォームの作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "ファイル検索ツール"
$form.Size = New-Object System.Drawing.Size(550, 450)

# ラベルとテキストボックス:検索フォルダ
$lblFolder = New-Object System.Windows.Forms.Label
$lblFolder.Text = "検索フォルダ:"
$lblFolder.Location = New-Object System.Drawing.Point(10, 15)
$form.Controls.Add($lblFolder)

$txtFolder = New-Object System.Windows.Forms.TextBox
$txtFolder.Text = "C:\Users\Public"
$txtFolder.Size = New-Object System.Drawing.Size(350, 20)
$txtFolder.Location = New-Object System.Drawing.Point(100, 10)
$form.Controls.Add($txtFolder)

$btnBrowse = New-Object System.Windows.Forms.Button
$btnBrowse.Text = "選択"
$btnBrowse.Location = New-Object System.Drawing.Point(460, 10)
$btnBrowse.Size = New-Object System.Drawing.Size(60, 25)
$form.Controls.Add($btnBrowse)

# ラベルとテキストボックス:キーワード検索
$lblKeyword = New-Object System.Windows.Forms.Label
$lblKeyword.Text = "ファイル名に含む文字:"
$lblKeyword.Location = New-Object System.Drawing.Point(10, 50)
$form.Controls.Add($lblKeyword)

$txtKeyword = New-Object System.Windows.Forms.TextBox
$txtKeyword.Location = New-Object System.Drawing.Point(150, 45)
$txtKeyword.Size = New-Object System.Drawing.Size(200, 20)
$form.Controls.Add($txtKeyword)

# ラベルとテキストボックス:拡張子
$lblExt = New-Object System.Windows.Forms.Label
$lblExt.Text = "拡張子(例:.txt):"
$lblExt.Location = New-Object System.Drawing.Point(10, 80)
$form.Controls.Add($lblExt)

$txtExt = New-Object System.Windows.Forms.TextBox
$txtExt.Location = New-Object System.Drawing.Point(150, 75)
$txtExt.Size = New-Object System.Drawing.Size(100, 20)
$form.Controls.Add($txtExt)

# 検索ボタン
$btnSearch = New-Object System.Windows.Forms.Button
$btnSearch.Text = "検索"
$btnSearch.Location = New-Object System.Drawing.Point(400, 70)
$btnSearch.Size = New-Object System.Drawing.Size(120, 30)
$form.Controls.Add($btnSearch)

# 検索結果表示用リストボックス
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10, 120)
$listBox.Size = New-Object System.Drawing.Size(510, 270)
$form.Controls.Add($listBox)

# フォルダ選択
$btnBrowse.Add_Click({
    $dialog = New-Object System.Windows.Forms.FolderBrowserDialog
    if ($dialog.ShowDialog() -eq "OK") {
        $txtFolder.Text = $dialog.SelectedPath
    }
})

# 検索ボタン処理
$btnSearch.Add_Click({
    $listBox.Items.Clear()
    $path = $txtFolder.Text
    $keyword = $txtKeyword.Text
    $ext = $txtExt.Text

    if (Test-Path $path) {
        $files = Get-ChildItem $path -Recurse -File -ErrorAction SilentlyContinue

        foreach ($file in $files) {
            if (($keyword -eq "" -or $file.Name -like "*$keyword*") -and
                ($ext -eq "" -or $file.Extension -eq $ext)) {
                $listBox.Items.Add($file.FullName)
            }
        }
    } else {
        [System.Windows.Forms.MessageBox]::Show("フォルダが存在しません")
    }
})

# ダブルクリックでファイルを開く
$listBox.Add_DoubleClick({
    $selected = $listBox.SelectedItem
    if ($selected) {
        Invoke-Item $selected
    }
})

# フォーム表示
$form.ShowDialog()

実行イメージ

  1. 検索対象のフォルダを選ぶ
  2. 「ファイル名に含む文字」や「拡張子」を入力
  3. 「検索」ボタンを押すと該当ファイルが一覧に表示
  4. ダブルクリックでファイルを開ける!

活用のヒント

  • 「報告書」「設計図」などファイル名キーワードで業務ファイルを即検索
  • .xlsx.pdfなど拡張子で業務資料を絞り込み
  • 毎日のファイル整理・確認作業の時短に最適!

まとめ

今回のアプリで、複数条件を使ったファイル検索がボタンひとつで実現できるようになりました。PowerShellは、ちょっとした工夫で「実用的な業務ツール」に変身します!

次回は、検索条件を保存して再利用できるツール化の方法や、結果をExcelに出力する方法なども紹介予定です!


コメント

タイトルとURLをコピーしました