![PowerShell 程式設計:遍歷資料夾和子資料夾並套用 pdftotext。輸入/輸出錯誤](https://rvso.com/image/1654582/PowerShell%20%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88%EF%BC%9A%E9%81%8D%E6%AD%B7%E8%B3%87%E6%96%99%E5%A4%BE%E5%92%8C%E5%AD%90%E8%B3%87%E6%96%99%E5%A4%BE%E4%B8%A6%E5%A5%97%E7%94%A8%20pdftotext%E3%80%82%E8%BC%B8%E5%85%A5%2F%E8%BC%B8%E5%87%BA%E9%8C%AF%E8%AA%A4.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: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 檔。