これが私がやろうとしていることです:
さまざまな形式の巨大なファイル(約1万)があります。各ファイルは、特定のタイプとして定義できます(例:製品シート、事業計画、オファー、プレゼンテーションなど)。ファイルは特定の順序ではなく、単一のリストとして表示される場合もあります。タイプ別にカタログを作成することに興味があります。
アイデアは、特定のフォーマットと特定のタイプについて、ファイルのコンテンツで検索するキーワードを知っているということです。基本的に、特定のキーワードを含む特定の形式のすべてのファイルを探し、各リストを個別のcsvに出力する一連のスクリプトを実行するpowershellスクリプトが必要です。ここでの重要なポイントは、キーワードがファイル名ではなくコンテンツ(pdfの本文、Excelのセルなど)に含まれることです。今のところ、私は以下を試しました:
get-childitem -Recurse | where {!$_.PSIsContainer} |
select-object FullName, LastWriteTime, Length, Extension | export-csv -notypeinformation -delimiter '|' -path C:\Users\Uzer\Documents\file.csv -encoding default
それはいいことで、サイズと拡張子を含むファイルの完全なリストが表示されます。私は同様のものを探していますが、コンテンツでフィルタリングしています。何か案は?
編集:彼女の下の解決策に基づいて彼女の新しいコード:
$searchstring = "foo"
$directory = Get-ChildItem -include ('*.pdf') -Path "C:\Users\Uzer\Searchfolder" -Recurse
foreach ($obj in $directory)
{Get-Content $obj.fullname | Where-Object {$_.Contains($searchstring)}| select-object FullName, LastWriteTime, Length, Extension | export-csv -notypeinformation -delimiter '|' -path C:\Users\Uzer\Documents\file2.csv -encoding default}
しかし、私はこれらのエラーの束を受け取ります:
An object at the specified path C:[blabla]\filename.pdf does not exist, or has been filtered by the -Include or -Exclude parameter.
itextsharp.dll を使用するPowerShell。以下はキーワードごとに各PDFの各ページのテキストを評価し、一致したものをcsvにエクスポートします。これを実行すると、一致が見つかった場合にファイルの名前を変更したり、分類されたフォルダーなどに移動したりできます。
Add-Type -Path "C:\path_to_dll\itextsharp.dll"
$pdfs = gci "C:\path_to_pdfs" *.pdf
$export = "C:\path_to_export\export.csv"
$results = @()
$keywords = @('Keyword1','Keyword2','Keyword3')
foreach($pdf in $pdfs) {
Write-Host "processing -" $pdf.FullName
# prepare the pdf
$reader = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList $pdf.FullName
# for each page
for($page = 1; $page -le $reader.NumberOfPages; $page++) {
# set the page text
$pageText = [iTextSharp.text.pdf.parser.PdfTextExtractor]::GetTextFromPage($reader,$page).Split([char]0x000A)
# if the page text contains any of the keywords we're evaluating
foreach($keyword in $keywords) {
if($pageText -match $keyword) {
$response = @{
keyword = $keyword
file = $pdf.FullName
page = $page
}
$results += New-Object PSObject -Property $response
}
}
}
$reader.Close()
}
Write-Host ""
Write-Host "done"
$results | epcsv $export -NoTypeInformation
コンソール出力:
processing - C:\path_to_pdfs\1.pdf
processing - C:\path_to_pdfs\2.pdf
processing - C:\path_to_pdfs\3.pdf
processing - C:\path_to_pdfs\4.pdf
processing - C:\path_to_pdfs\5.pdf
done
PS C:\>
Csv出力:
keyword page file
Keyword2 14 C:\path_to_pdfs\3.pdf
Keyword3 22 C:\path_to_pdfs\3.pdf
Keyword1 6 C:\path_to_pdfs\5.pdf
PDFのファイル内容がWindows Searchでインデックス付けされている場合、システムファイルシステムインデックスをクエリできます。Windowsがインデックスを作成するようにするには、 iFilterのインストール が必要になる場合があります。 PDF。しかし、この方法はpdf、テキストファイル、xlsxファイルなどで機能します。
$searchString = "foo"
$searchPath = "C:\Users\Uzer\Searchfolder"
$sql = "SELECT System.ItemPathDisplay, System.DateModified, " +
"System.Size, System.FileExtension FROM SYSTEMINDEX " +
"WHERE SCOPE = '$searchPath' AND FREETEXT('$searchstring')"
$provider = "provider=search.collatordso;extended properties=’application=windows’;"
$connector = new-object system.data.oledb.oledbdataadapter -argument $sql, $provider
$dataset = new-object system.data.dataset
if ($connector.fill($dataset)) { $dataset.tables[0] }