我想將字串連接命令的結果包含在使用pdftk命令列工具的呼叫中。這是我嘗試過的:
$items_to_merge = '"' $($(get-childitem *.pdf).name -join '" "') '"'
echo $items_to_merge
pdftk $items_to_merge cat output test.pdf
單個 pdf 檔案名本身包含空格,所以這就是我用雙引號將每個檔案名括起來的原因。
然而,當我運行這個命令時,我得到pdftk如下錯誤:
錯誤:無法找到檔案
我有點驚訝,因為手動列舉檔案并用雙引號括起來一直有效。當我以編程方式執行時,為什么會失敗?
uj5u.com熱心網友回復:
在 Windows Sandbox 中,使用帶有或不帶有額外雙引號的字串陣列可以更簡單地作業。我將網頁列印為 pdf 以制作示例 pdf。
$items_to_merge = (get-childitem *.pdf).name
$items_to_merge
pdftk $items_to_merge cat output test.pdf
或者使用通配符:
pdftk *.pdf cat output test.pdf
uj5u.com熱心網友回復:
在這種情況下invoke-expression是你的朋友:
$items_to_merge = '"' $($(get-childitem *.pdf).name -join '" "') '"'
echo $items_to_merge
invoke-expression "pdftk $items_to_merge cat output test.pdf"
uj5u.com熱心網友回復:
讓 PowerShell 來參考檔案名。通過在變數名前面使用@而不是$,PowerShell 將陣列擴展為單獨的引數(又名陣列 splatting),如有必要,這些引數將被參考。
$items_to_merge = (get-childitem *.pdf).name
pdftk @items_to_merge cat output test.pdf
正如評論者js2010指出的那樣,甚至沒有必要進行潑濺。這也有效:
$items_to_merge = (get-childitem *.pdf).name
pdftk $items_to_merge cat output test.pdf
顯然,PowerShell 在傳遞給本機命令時隱式地插入了一個陣列引數。
就我個人而言,我仍然更喜歡顯式 splatting,因為它始終適用于本機和 PowerShell 命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/358634.html
