修改PowerShell脚本:将2个docx合并为单个PDF文件
嘿,我来帮你搞定这个需求!虽然你熟悉Linux批处理但对PowerShell不太了解,没关系,我给你写个简单易懂的脚本,还会一步步讲清楚逻辑~
实现两个DOCX合并为单个PDF的PowerShell脚本
这个方案会用到Microsoft Word的COM对象,所以你的电脑得安装Office或独立的Word组件哦(就像Linux里用工具需要对应依赖一样)。
完整脚本示例
# 定义要合并的两个DOCX文件路径,按你需要的先后顺序排列 $docxFiles = @( "C:\your\path\first.docx", "C:\your\path\second.docx" ) # 定义最终输出的PDF文件路径 $outputPdf = "C:\your\path\merged_result.pdf" # 创建Word应用对象,设置为后台运行(不弹出Word窗口) $word = New-Object -ComObject Word.Application $word.Visible = $false try { # 创建一个空白文档,用来存放合并后的内容 $mergedDoc = $word.Documents.Add() # 逐个处理每个DOCX文件,把内容复制到空白文档中 foreach ($file in $docxFiles) { # 打开当前DOCX文件 $currentDoc = $word.Documents.Open($file) # 复制当前文档的全部内容 $currentDoc.Content.Copy() # 将光标移到合并文档末尾,粘贴内容 $mergedDoc.Content.Paste() # 可选:添加分页符,让两个文档的内容分开在不同页面 $mergedDoc.Content.InsertParagraphAfter() $mergedDoc.Content.InsertBreak([Microsoft.Office.Interop.Word.WdBreakType]::wdPageBreak) # 关闭当前DOCX文件,不保存修改(我们只是复制内容) $currentDoc.Close($false) } # 将合并后的文档导出为PDF格式 $mergedDoc.SaveAs([ref]$outputPdf, [ref]17) # 17是Word内置的PDF格式枚举值 Write-Host "合并完成!PDF已保存到: $outputPdf" } catch { Write-Host "执行出错啦: $_" } finally { # 关闭合并后的文档,不保存临时内容 $mergedDoc.Close($false) # 退出Word应用,释放后台进程(避免残留) $word.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() }
脚本逻辑说明(对应你熟悉的批处理思路)
- 开头的
$docxFiles就像批处理里的变量,用来存储两个要合并的文件路径,顺序直接决定PDF里内容的先后 $word = New-Object -ComObject Word.Application相当于调用Word程序,Visible = $false让它在后台静默运行,不会弹出窗口干扰你- 循环部分和批处理的
for逻辑一致,逐个读取DOCX文件,把内容复制到新建的空白文档中 - 那个
InsertBreak是添加分页符的代码,如果你不想两个文档的内容连在同一页,就保留;如果需要连续显示,删掉那两行即可 SaveAs里的17是Word内置的PDF格式编号,类似批处理里指定输出格式的参数finally块是不管脚本执行成功还是失败,都会关闭Word并释放进程,避免后台残留无用的Word进程
使用方法
- 把脚本里的文件路径改成你自己的实际路径(PowerShell里支持反斜杠
\或正斜杠/) - 保存成
.ps1格式的文件,比如MergeDocxToPdf.ps1 - 打开PowerShell,导航到脚本所在文件夹,运行命令:
.\MergeDocxToPdf.ps1
如果遇到执行权限问题(类似Linux里的chmod +x),可以先在PowerShell里运行:Set-ExecutionPolicy RemoteSigned,按提示选择Y即可临时放开本地脚本的执行权限。
内容的提问来源于stack exchange,提问作者yurividal




