この記事では、ps1ファイルを使用してファイルの中身を検索する方法を紹介します。
まず、結論を記載します。
ps1ファイルでファイルの中身検索
- ファイルの内容検索は「-match」コマンドを使用
- 検索したい内容を指定→ファイルの中身読み出し→ifとmatchを使って確認
下記、詳細を説明します。
使用するコマンド
前述の通り、「-match」コマンドを使用します。
文法 | 機能 |
[文字列A] -match [文字列B] | [文字列A]に[文字列B]が含まれる場合にtrueを返す |
詳細はこちらのサイトをご覧ください。
使用例1 Wordの中身を検索
matchを活用することによって、Wordの中身を検索できます。
# COMオブジェクトを作成してWordを起動
$word = New-Object -ComObject Word.Application
$word.Visible = $false # Wordウィンドウを非表示にする
# スクリプトファイルのディレクトリをカレントディレクトリに設定する
Set-Location -Path $PSScriptRoot
# 検索する単語の入力
$keyword = Read-Host "検索する単語を入力してください"
# Wordファイル内のテキストを検索する
$files = Get-ChildItem -Path $PSScriptRoot -Filter *.docx
foreach ($file in $files) {
$document = $word.Documents.Open($file.FullName)
foreach ($paragraph in $document.Paragraphs) {
$text = $paragraph.Range.Text
if ($text -match $keyword) {
Write-Host "File: $($file.FullName)"
Write-Host "--------------------------"
}
}
$document.Close()
}
# Wordアプリケーションを終了
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
Remove-Variable word
Write-Host "検索が完了しました。"
こちらのコードでは、
検索ワードを入力→Wordを開く→各段落を検索→検索ワードがあったら情報取得
という処理をしています。
使用方法はこちらの記事をご覧ください。
使用例2 Excelの中身を検索
先ほど同様の処理によって、Excelの中身を検索できます。
# COMオブジェクトを作成してExcelを起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false # Excelウィンドウを非表示にする
# スクリプトファイルのディレクトリをカレントディレクトリに設定する
Set-Location -Path $PSScriptRoot
# 検索する単語の入力
$keyword = Read-Host "検索する単語を入力してください"
# 現在のディレクトリ内のExcelファイルを検索する
$files = Get-ChildItem -Path $PSScriptRoot -Filter *.xlsx
foreach ($file in $files) {
$workbook = $excel.Workbooks.Open($file.FullName)
foreach ($worksheet in $workbook.Worksheets) {
$rows = $worksheet.UsedRange.Rows.Count
$cols = $worksheet.UsedRange.Columns.Count
for ($i = 1; $i -le $rows; $i++) {
for ($j = 1; $j -le $cols; $j++) {
$cell = $worksheet.Cells.Item($i, $j)
$cellText = $cell.Text
if ($cellText -match $keyword) {
Write-Host "File: $($file.FullName)"
Write-Host "Cell: $cellText"
Write-Host "--------------------------"
}
}
}
}
$workbook.Close()
}
# Excelアプリケーションを終了
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel
Write-Host "検索が完了しました。"
こちらのコードでは、
検索ワードを入力→Wordを開く→各段落を検索→検索ワードがあったら情報取得
という処理をしています。
使用方法はこちらの記事をご覧ください。
その他のps1ファイル
今回はリネームに焦点を当てましたが、
ps1ファイルを使用するとその他にも様々な処理も行うことができます。
ps1ファイルに可能なことを大まかに知りたい方はこちらの記事を、
実際に使用できるコードを知りたい方はこちらの記事を参照ください。
以上、最後まで読んでくださりありがとうございました。
メーカー勤務のサラリーマン。
生成AIを駆使してプログラムを作り、
日々の業務の効率化を図る。