用 PowerShell 批次轉換 docx 到 pdf | Daily Oops!
Daily Oops

Daily Oops!

August 29, 2017

用 PowerShell 批次轉換 docx 到 pdf

近況

內容與標題不符。

我從今年的八月開始登入替代役 online。替代役自由多了,回想起成功嶺的那兩周,不僅餐餐吃不飽,還因為腸胃炎而再次掉了兩公斤多 Zzz,實在有夠悲劇。

可能因為這麼悲慘的運氣補償機制吧(喂),我來到了國訓中心開始了一年的役期,也多了些「閒暇時間」可以利用,無論如何都是非常幸運了 QAQ

進入正題吧

批次轉換 docx 成 pdf

需求很簡單,也有現成軟體可以達成,不過身為一個開發者,連文書也要做的潮才行。以往一直沒什麼機會在 Windows 下進行自動化(多半是當時還太菜),有了這個機會當然要好好利用。

雖然沒寫過 PowerShell,不過 Google 第一項結果在 StackOverFlow 就有了,輕鬆愉快。

啟用腳本執行權限

首先設定讓 powershell 可以執行腳本,以系統管理員身分執行 PowerShell 並跑起以下指令:

Set-ExecutionPolicy RemoteSigned

寫 PowerShell 腳本

然後把以下腳本存成副檔名為 .ps1,比如 word-to-pdf.ps1。其中 $documents_path 改成目標資料夾路徑。

# From https://stackoverflow.com/a/16537996
$documents_path = 'C:\Users\user\Documents\blahblahblah'
$word_app = New-Object -ComObject Word.Application
# This filter will find .doc as well as .docx documents
Get-ChildItem -Path $documents_path -Filter *.doc? -Recurse | ForEach-Object {
$document = $word_app.Documents.Open($_.FullName)
$pdf_filename = "$($_.DirectoryName)\$($_.BaseName).pdf"
$document.SaveAs([ref] $pdf_filename, [ref] 17)
$document.Close()
}
$word_app.Quit()

注意的是在 Get-ChildItem 方法我加上了 -Recurse 遞迴參數,讓所有子目錄底下的 docx 都能被轉換到。

點擊兩下執行,所有 pdf 就會慢慢產生在 docx 檔的旁邊啦,瞬間開始耍廢!(喂)

之後若有更多的 PowerShell 輔助使用腳本,我都會放在 powershell-study 這個 repo,歡迎自行取用 :p

(完)