![PowerShell プログラミング: フォルダーとサブフォルダーを走査し、pdftotext を適用します。I/O エラー](https://rvso.com/image/1654582/PowerShell%20%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%3A%20%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%81%A8%E3%82%B5%E3%83%96%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E8%B5%B0%E6%9F%BB%E3%81%97%E3%80%81pdftotext%20%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82I%2FO%20%E3%82%A8%E3%83%A9%E3%83%BC.png)
ディレクトリ内のすべてのフォルダーとサブフォルダーを走査し、各フォルダーの内容を表示する次の 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 ファイルのみをフィルタリングする必要があります。