2013-10-17 70 views
0

我正在将一系列3500个html文档转换为文档存储库的Word。我们遇到了一些问题,在转换的后端发现一些超链接,原因不明。我想生成一个文件名列表以及每个文件中包含的链接,以查看是否可以找到任何模式并相应地调整我的转换程序。不幸的是,包含PowerShell和超链接的搜索导致了很多关于如何使用Powershell添加超链接的项目,并且没有任何情况适用于我的需求。如何使用PowerShell编辑Word文档中的超链接?

使用this linkthis link与此代码我的出发点....

$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. 

我在运行时出界限和命令失败错误。 This Link帮助,和this link回答我的问题为VBA/VBScript ...但不是PowerShell。有没有人有这个Powershell解决方案?

回答

0

有人曾问过类似的问题,为Excel前一阵子: Excel & Powershell: Bulk Find and replace URL's used in formulas

所以,一旦你有超链接,你可以简单地更换使用的.html -replace为.doc。例如:

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

请注意,如果你不改变TextToDisplay,超链接地址会改变,但你仍然会看到旧值。

0

可能有一些做以下几点:

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

为什么不它改写成这样的事情(你需要找到合适的类型,如超级链接自己)

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