PowerShell プログラミング: フォルダーとサブフォルダーを走査し、pdftotext を適用します。I/O エラー

PowerShell プログラミング: フォルダーとサブフォルダーを走査し、pdftotext を適用します。I/O エラー

ディレクトリ内のすべてのフォルダーとサブフォルダーを走査し、各フォルダーの内容を表示する次の 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 ファイルのみをフィルタリングする必要があります。

関連情報