どうも、山羊丸です。今日はWordのお話です。
お仕事でWord入力があった際、
上司の方がデータ入力の際、判別不可の文字を特殊記号として入力し、
エクスプローラーから検索できない事態になったので、
急遽Copilot様と共同でPowerShellスクリプトを組みました。
Wordファイル本文内の●が検索できなかったので
●を本文から検索してファイル名を標準出力します。
以下がそれとなります。
DocumentKeywordSearch.ps1 ← このファイル名で保存してください
スクリプト内の $directory と $keyword は用途に応じ変えてください。
# 検索するディレクトリとキーワードを指定します※★要変更★
$directory = 'C:\Users\Temp\Desktop\Folder'
$keyword = '●'
# 必要なライブラリをインポートします
Add-Type -AssemblyName Microsoft.Office.Interop.Word
# Wordアプリケーションオブジェクトを作成します
$word = New-Object -ComObject Word.Application
# 指定したディレクトリ内のすべてのWordファイルを取得します
Get-ChildItem -Path $directory -Filter *.docx | ForEach-Object {
$document = $word.Documents.Open($_.FullName)
$range = $document.Content
# 指定したキーワードを検索します
$search = $range.Find
$search.Text = $keyword
$result = $search.Execute()
# キーワードが見つかった場合、ファイル名を出力します
if ($result) {
$filename = Split-Path $_.FullName -Leaf
Write-Output "Keyword found in file: $filename"
}
# ドキュメントを閉じます
$document.Close()
}
# Wordアプリケーションを終了します
$word.Quit()
起動は以下のバッチファイルから行います。
DocumentKeywordSearch.bat ← このファイル名で保存してください
@echo off powershell -ExecutionPolicy RemoteSigned %~dp0\DocumentKeywordSearch.ps1 PAUSE
DocumentKeywordSearch.ps1 と DocumentKeywordSearch.bat を同階層に配置。
DocumentKeywordSearch.ps1 の内容を変更した後、
DocumentKeywordSearch.batをダブルクリック。
スクリプトが実行されます。
検索にHITしたファイル名が表示されます。
内容を保存したい場合は
出力されたファイル名をドラッグ選択して右クリックでクリップボードに保存されます。
検索対象フォルダは $directory 同階層のみです配下はカウントされません。
必ずバックアップを取ってから実行してください
※以上、自己責任にてご利用ください。
当方は損害、苦情等を受けつません。
※2024/6/18
フルパス出力から、ファイル名出力に変更