我正在将一系列3500个html文档转换为Word以获取文档存储库。我们遇到了一个问题,其中一些超链接在转换的后端被破坏,没有明显的原因。我想生成一个文件名列表和每个文件中包含的链接,看看我是否可以发现任何模式并相应地调整我的转换程序。不幸的是,包含PowerShell和超链接的搜索会导致很多关于如何使用Powershell添加超链接的项目,并且没有一种情况适用于我的需求。
使用this link和this 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 :(得分:0)
前一段时间有人曾向Excel提出类似的问题: Excel & Powershell: Bulk Find and replace URL's used in formulas
因此,一旦你有超链接,你可以简单地使用-replace将.html替换为.doc。例如:
$hyperlinks | % {$_.TextToDisplay = $_.address= $_.address -replace '.html','.doc'}
请注意,如果您不更改TextToDisplay,超链接地址将会更改,但您仍会看到旧值。
答案 1 :(得分:0)
可能与以下内容有关:
If ($.Address. -match ".\.doc") {
^
$newExt = ".doc" ;
$newURI = ([uri]$$_.address).BaseName.$newExt.
^ ^
为什么不把它重写成这样的东西(你需要自己找到像Hyperlink这样的正确类型)
$toChange = $document.Hyperlinks | ? { $_.address.endswith('.doc') } | % { $_.address = $_.address.replace('.doc', '.html') }