0

我正在将一系列 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 更改为 doc,但是第二次插入此代码:

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

我在运行时出现越界和命令失败错误。这个链接有帮助,这个链接回答了我对 VBA/VBScript 的问题......但不是 PowerShell。有没有人为此提供Powershell解决方案?

4

2 回答 2

0

前段时间有人对 Excel 提出了类似的问题: Excel & Powershell: Bulk Find and replace URL's used in formulas

因此,一旦有了超链接,您就可以使用 -replace 将 .html 简单地替换为 .doc。例如:

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

请注意,如果您不更改 TextToDisplay,超链接地址将会更改,但您仍会看到旧值。

于 2013-10-17T19:51:36.823 回答
0

可能与以下内容有关:

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

为什么不把它重写成这样的东西(你需要自己找到正确的类型,比如超链接)

$toChange = $document.Hyperlinks | ? { $_.address.endswith('.doc') } | % { $_.address = $_.address.replace('.doc', '.html') }
于 2013-10-17T19:58:05.970 回答