近況

內容與標題不符。

我從今年的八月開始登入替代役 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

(完)