これは以前には行われていなかったので、それを理解するのはいいことでした。私たちは今日一緒に学びます!あなたはとても近くにいた。ちょうどいくつかの調整と、複数のファイルを扱うためのループが必要でした。私はもっと精通した人が落ちるだろうと確信していますが、これはあなたに望ましい結果をもたらすはずです。
$NewDomain1 = "google"
$NewDomain2 = "hij"
$OurDocuments = Get-ChildItem -Path "C:\Apps\testing" -Filter "*.doc*" -Recurse
$Word = New-Object -ComObject word.application
$Word.Visible = $false
$OurDocuments | ForEach-Object {
$Document = $Word.documents.open($_.FullName)
"Processing file: {0}" -f $Document.FullName
$Document.Hyperlinks | ForEach-Object {
if ($_.Address -like "https://www.yahoo.com/*") {
$NewAddress = $_.Address -Replace "yahoo","google"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
} elseif ($_.Address -like "http://def.com/*") {
$NewAddress = $_.Address -Replace "def","hij"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
}
}
"Saving changes to {0}" -f $Document.Fullname
$Document.Save()
$Pdf = $Document.FullName -replace $_.Extension, '.pdf'
"Saving document {0} as PDF {1}" -f $Document.Fullname,$Pdf
$Document.ExportAsFixedFormat($Pdf,17)
"Completed processing {0} `r`n" -f $Document.Fullname
$Document.Close()
}
$Word.Quit()
私たちは、最初の将来の参照や変更を容易にするための変数のカップルにあなたの新しいアドレスを移動します
...さんはそれを見てみましょう。探しているアドレスを追加して、必要に応じてハードコードされた文字列を置き換えることもできます。 3行目では、フィルタを使用してディレクトリ内のすべての.DOCファイルと.DOCXファイルを取得します。これを繰り返し処理に使用します。個人的には、-Recurse
スイッチを使用することに注意してください。ディレクトリ構造のファイルを意図せずに変更する危険性があります。
$NewAddress1 = "https://www.google.com/"
$NewAddress2 = "http://hij.com/"
$OurDocuments = Get-ChildItem -Path "C:\Apps\testing" -Filter "*.doc*" -Recurse
Word Comオブジェクトをインスタンス化し、表示しないようにします。
$Word = New-Object -ComObject word.application
$Word.Visible = $false
我々は$OurDocuments
に集まった各文書について...当社ForEach-Object
ループに
ステッピング、我々はAddress
プロパティの値をチェックし、別のForEach-Object
、へのハイパーリンクを、それを開いて、パイプ。必要な一致がある場合は、新しい値でプロパティを更新します。 TextToDisplay
のプロパティも更新されています。 Address
とは対照的に、ハイパーリンクの実際の位置を制御します。
... $_.Address = $_.TextToDisplay = $NewAddress1
...多変数割り当ての例です。 Address
とTextToDisplay
は同じ値に設定されるため、同時に割り当てます。ここで作られた
$Document = $Word.documents.open($_.FullName)
"Processing file: {0}" -f $Document.FullName
$Document.Hyperlinks | ForEach-Object {
if ($_.Address -like "https://www.yahoo.com/*") {
$NewAddress = $_.Address -Replace "yahoo","google"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
} elseif ($_.Address -like "http://def.com/*") {
$NewAddress = $_.Address -Replace "def","hij"
"Updating {0} to {1}" -f $_.Address,$NewAddress
$_.Address = $_.TextToDisplay = $NewAddress
}
}
保存の変更...
"Saving changes to {0}" -f $Document.Fullname
$Document.Save()
は、我々はPDFとして保存するときのために新しいファイル名を作成します。最初の行には$_.Extension
という通知があります。現在のパイプラインオブジェクトは依然としてGet-ChildItem
のファイル情報オブジェクトなので、ファイル拡張子を参照するためにパイプラインオブジェクトを使用することに切り替えます。 $Document
オブジェクトには拡張プロパティがないため、同じ結果を得るにはファイル名をスライスする必要があります。
$Pdf = $Document.FullName -replace $_.Extension, '.pdf'
"Saving document {0} as PDF {1}" -f $Document.Fullname,$Pdf
$Document.ExportAsFixedFormat($Pdf,17)
はアップ文書を閉じて、ループが$OurDocuments
に次のファイルに移動します。
"Completed processing {0} `r`n" -f $Document.Fullname
$Document.Close()
すべてのドキュメントを実行したら、Wordを閉じます。
$Word.Quit()
私はすべてが意味をなさないことを願っています!
これは、リンクの残りの部分を同じように維持するリンクの一部だけで検索を実行しようとしていることを除いて、非常に近いです。 –
TLDを更新するだけですか?簡単に行うことができます。あなたは本質的に '$ NewAddress = $ OldAddress -Replace" yahoo "、" google "'のようなことをしています。アドレスの他のすべての部分が同じままであると仮定すると、それはです。私は一瞬で答えにそれを投げようとします。 – mroloff
変更が加えられ、テストのために機能しています。 '$ _。Address -eq'は文字列の最後にアスタリスクを付けた' $ _。Address-like'になりました。 '$ NewAddress = $ _。Address - " yahoo "、" google "はドメイン名を_only_に置き換えて新しいアドレスを生成します。ファイルを検索するのに必要なだけのものを調整するのは簡単です。 – mroloff