![Программирование PowerShell: обход папок и подпапок и применение pdftotext. Ошибка ввода-вывода](https://rvso.com/image/1654582/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20PowerShell%3A%20%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%20%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA%20%D0%B8%20%D0%BF%D0%BE%D0%B4%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA%20%D0%B8%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20pdftotext.%20%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0.png)
Я правильно написал следующую команду PowerShell для обхода каждой папки и подпапки каталога и отображения содержимого каждой такой папки:
Get-ChildItem -Path "C:\whiskey\Tango\Charlie" –Recurse
Я также написал скрипт PowerShell, который работает корректно и может извлекать текст из каждого PDF-файла в одной папке.
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 : Ошибка ввода-вывода: Не удалось открыть файл. Обратите внимание, что ни один из файлов 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 : Ошибка ввода-вывода: Не удалось открыть файл "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.