gpt4 book ai didi

在 word 中查找和更改超链接的 Powershell 脚本保存 doc 并创建一个新副本作为 PDF

转载 作者:行者123 更新时间:2023-12-03 16:26:59 27 4
gpt4 key购买 nike

我想弄清楚如何编写一个脚本来遍历文件夹并抓取文件夹中的所有 word 文档以搜索超链接并将链接更改为另一个链接。然后保存该 word 文档并创建另一个版本,将其转换为 pdf。

我如何调整下面的脚本以获取文件夹中的所有 word 文档,然后搜索所有超链接“https://www.yahoo.com”到“https://www.google.com”。一些如何遍历整个文档搜索所有超链接。保存该文档,然后转换并提供新的 pdf。

这可能吗?

到目前为止我有什么

    $word = New-Object -ComObject word.application
$document = $word.documents.open("path to folder")
$hyperlinks = @($document.Hyperlinks)
$hyperlinks | ForEach {
$newURI = ([uri]$_.address).AbsoluteUri
Write-Verbose ("Updating {0} to {1}" -f $_.Address,$newURI) -Verbose
$_.address = $newURI
}
If (_$.address -eq "https://www.yahoo.com/") {
$_.Address = "https://www.google.com/"
} ElseIf ($_.Address -eq "http://def.com/motorists") {
$_.Address = "http://hij.com/"
}
$document.save()
$word.quit()

Get-ChildItem -Path $document -Include *.doc, *.docx -Recurse |
ForEach-Object {
$doc = $word.Documents.Open($_.Fullname)
$pdf = $_.FullName -replace $_.Extension, '.pdf'
$doc.ExportAsFixedFormat($pdf,17)
$doc.Close()
}
$word.Quit()

我是 Powershell 的新手,有人可以帮助我完成这些步骤吗?我听说 powershell 可能是完成此类任务的最佳和最强大的语言。

最佳答案

以前没有做过,所以很高兴弄清楚。我们今天都要学习!你们非常亲密。只需要进行一些调整和一个处理多个文件的循环。我敢肯定会有更有知识的人加入,但这应该能让你得到想要的结果。

$NewDomain1 = "google"
$NewDomain2 = "hij"
$OurDocuments = Get-ChildItem -Path "C:\Apps\testing" -Filter "*.doc*" -Recurse

$Word = New-Object -ComObject word.application
$Word.Visible = $false

$OurDocuments | ForEach-Object {
$Document = $Word.documents.open($_.FullName)
"Processing file: {0}" -f $Document.FullName
$Document.Hyperlinks | ForEach-Object {
if ($_.Address -like "https://www.yahoo.com/*") {
$NewAddress = $_.Address -Replace "yahoo","google"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
} elseif ($_.Address -like "http://def.com/*") {
$NewAddress = $_.Address -Replace "def","hij"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
}
}

"Saving changes to {0}" -f $Document.Fullname
$Document.Save()

$Pdf = $Document.FullName -replace $_.Extension, '.pdf'
"Saving document {0} as PDF {1}" -f $Document.Fullname,$Pdf
$Document.ExportAsFixedFormat($Pdf,17)

"Completed processing {0} `r`n" -f $Document.Fullname
$Document.Close()
}

$Word.Quit()

让我们来看看它......

我们会先将您的新地址移动到几个变量中,以便于将来引用和更改。您还可以在此处添加您要查找的地址,根据需要替换硬编码字符串。第三行使用过滤器获取目录中的所有 .DOC 和 .DOCX 文件,我们将使用它们进行迭代。就我个人而言,我会谨慎使用 -Recurse 开关,因为您冒着对目录结构中更深层的文件进行意外更改的风险。

$NewAddress1 = "https://www.google.com/"
$NewAddress2 = "http://hij.com/"
$OurDocuments = Get-ChildItem -Path "C:\Apps\testing" -Filter "*.doc*" -Recurse

实例化我们的 Word Com 对象并将其隐藏起来。

$Word = New-Object -ComObject word.application
$Word.Visible = $false

进入我们的 ForEach-Object 循环...

对于我们在 $OurDocuments 中收集的每个文档,我们打开它并将任何超链接通过管道传输到另一个 ForEach-Object,我们在其中检查 的值地址 属性。如果有我们想要的匹配项,我们会用新值更新该属性。您会注意到我们还更新了 TextToDisplay 属性。这是您在文档中看到的文本,与控制超链接实际去向的 Address 相对。

这... $_.Address = $_.TextToDisplay = $NewAddress1 ...是多变量赋值的一个例子。由于 AddressTextToDisplay 将设置为相同的值,因此我们将同时分配它们。

$Document = $Word.documents.open($_.FullName)
"Processing file: {0}" -f $Document.FullName
$Document.Hyperlinks | ForEach-Object {
if ($_.Address -like "https://www.yahoo.com/*") {
$NewAddress = $_.Address -Replace "yahoo","google"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
} elseif ($_.Address -like "http://def.com/*") {
$NewAddress = $_.Address -Replace "def","hij"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
}
}

保存所做的任何更改...

"Saving changes to {0}" -f $Document.Fullname
$Document.Save()

此处我们为另存为 PDF 时创建新文件名。注意第一行中的 $_.Extension。我们切换到使用管道对象来引用文件扩展名,因为当前管道对象仍然是我们 Get-ChildItem 中的文件信息对象。由于 $Document 对象没有扩展属性,您必须对文件名进行一些切片才能获得相同的结果。

$Pdf = $Document.FullName -replace $_.Extension, '.pdf'
"Saving document {0} as PDF {1}" -f $Document.Fullname,$Pdf
$Document.ExportAsFixedFormat($Pdf,17)

关闭文档,循环将移动到 $OurDocuments 中的下一个文件。

"Completed processing {0} `r`n" -f $Document.Fullname
$Document.Close()

运行完所有文档后,我们关闭 Word。

$Word.Quit()

我希望一切都有意义!

关于在 word 中查找和更改超链接的 Powershell 脚本保存 doc 并创建一个新副本作为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46412951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com