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 に変更しようとしていますが、2 番目に次のコードを挿入します。

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

実行時に範囲外になり、コマンドの失敗エラーが発生します。このリンクは役に立ち、このリンクは VBA/VBScript に関する私の質問に答えますが、PowerShell には答えません。これに対するPowershellソリューションを持っている人はいますか?

4

2 に答える 2

0

誰かが少し前に Excel について同様の質問をしました: Excel & Powershell: 数式で使用されている URL を一括検索して置換する

したがって、ハイパーリンクを作成したら、-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.
                     ^                           ^

このようなものに書き換えてみませんか (Hyperlink のような適切なタイプを自分で見つける必要があります)。

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