ディレクトリ内のすべてのフォルダーとサブフォルダーを走査し、各フォルダーの内容を表示する次の PowerShell コマンドを正しく記述しました。
Get-ChildItem -Path "C:\whiskey\Tango\Charlie" –Recurse
また、正しく動作し、単一のフォルダー内の各 PDF ファイルからテキストを抽出できる PowerShell スクリプトも作成しました。
cd "C:\whiskey"
$FILES= ls *.pdf
foreach ($f in $FILES) {
& "C:\Program Files\xpdf-tools-win-4.02\bin32\pdftotext.exe" -enc UTF-8 "$f"
}
私は、すべてのフォルダとサブフォルダを走査し、pdftotext プログラムを実行するために、両方のスクリプトを組み合わせようとしています。そこで、次のように書きました。
$files=Get-ChildItem -Path "C:\whiskey\Tango\Charlie" –Recurse
foreach ($f in $files){
& "C:\Program Files\xpdf-tools-win-4.02\bin32\pdftotext.exe" -enc UTF-8 "$f"
}
; これは正しくありません。次のエラーが表示されます。pdftotext.exe: I/O エラー: ファイルを開けませんでしたいずれの PDF ファイルも保護されていないことに注意してください。
質問: このエラーを修正するにはどうすればいいですか?
答え1
これは回答ではありませんが、@FrankThomas に続く拡張コメントです。次のスクリプトは「機能する」ようです。
$FOLDERS=@(Get-ChildItem -Path "C:\whiskey\Tango\Charlie" –Recurse)
$FOLDERS #print contents of array
foreach ($f in $FOLDERS) {
& "C:\Program Files\xpdf-tools-win-4.02\bin32\pdftotext.exe" -enc UTF-8 $f.FullName
}
確かに、各フォルダとサブフォルダを調べて pdftotext プログラムを実行し、pdf ファイルの内容をテキスト ファイルに正しく抽出します。ただし、まだエラー メッセージが表示されます: pdftotext.exe: I/O エラー: ファイル「C:\whiskey\Tango\Charlie」を開けませんでした. すべてのフォルダーの名前が配列 $FOLDERS に保存されていると思われます。その後、PowerShell はフォルダーの名前を pdftotext に渡しますが、.pdf 拡張子が見つからないためエラーが発生します。
正しい PS スクリプトは次のとおりです。
$FOLDERS=@(Get-ChildItem -Path "C:\whiskey\Tango\Charlie" –Recurse -Filter *.pdf)
$FOLDERS #print contents of every folder
foreach ($f in $FOLDERS) {
& "C:\Program Files\xpdf-tools-win-4.02\bin32\pdftotext.exe" -enc UTF-8 $f.FullName
}
PDF ファイルのみをフィルタリングする必要があります。