如何使用PowerShell编辑Word文档中的超链接?

如何使用PowerShell编辑Word文档中的超链接?,powershell,hyperlink,Powershell,Hyperlink,我正在将一系列3500个html文档转换为Word文档库。我们遇到了一个问题,在转换的后端,一些超链接在没有明显原因的情况下被破坏。我想生成一个文件名列表和每个文件名中包含的链接,看看是否可以发现任何模式并相应地调整转换程序。不幸的是,包含PowerShell和超链接的搜索会导致大量关于如何使用PowerShell添加超链接的项目,而且这些情况都不适用于我的需要 使用和作为此代码的起点 $word = New-Object -ComObject Word.Application $documen

我正在将一系列3500个html文档转换为Word文档库。我们遇到了一个问题,在转换的后端,一些超链接在没有明显原因的情况下被破坏。我想生成一个文件名列表和每个文件名中包含的链接,看看是否可以发现任何模式并相应地调整转换程序。不幸的是,包含PowerShell和超链接的搜索会导致大量关于如何使用PowerShell添加超链接的项目,而且这些情况都不适用于我的需要

使用和作为此代码的起点

$word = New-Object -ComObject Word.Application
$document = $word.documents.open("C:\users\administrator\desktop\TEST.docx") 
$document.Hyperlinks 
([uri]"http://domain.com/This is a bad link").AbsoluteUri 
$hyperlinks = @($document.Hyperlinks) 
$hyperlinks | ForEach {
    If ($_.Address -match "\s") {
        $newURI = ([uri]$_.address).AbsoluteUri
        Write-Verbose ("Updating {0} to {1}" -f $_.Address,$newURI) -Verbose
        $_.address = $newURI
    }
}
$document.save()
$word.quit() 
我一直在努力设计一些能满足我需要的东西。我可以复制上述脚本的结果,但无法使用
ForEach
命令成功地遍历目录中的所有文档。我正在尝试将所有链接从html更改为文档,但在插入此代码后:

If ($.Address. -match ".\.doc") {
    $newExt = ".doc" ;
    $newURI = ([uri]$$_.address).BaseName.$newExt.

我在运行时出现越界和命令失败错误。帮助,并回答了我有关VBA/VBScript的问题…但不是PowerShell。有人对此有Powershell解决方案吗?

不久前有人针对Excel提出了类似的问题:

因此,一旦你有了超链接,你可以简单地用-replace替换.html到.doc。例如:

$hyperlinks | % {$_.TextToDisplay = $_.address= $_.address -replace '.html','.doc'}

请注意,如果不将文本更改为显示,超链接地址将更改,但仍将看到旧值。

可能与以下内容有关:

If ($.Address. -match ".\.doc") {
             ^
    $newExt = ".doc" ;
    $newURI = ([uri]$$_.address).BaseName.$newExt.
                     ^                           ^
为什么不重写成这样(你需要自己找到正确的类型,比如超级链接)

$toChange = $document.Hyperlinks | ? { $_.address.endswith('.doc') } | % { $_.address = $_.address.replace('.doc', '.html') }