2017-05-04 132 views
0

我的google-fu失敗了我,所以我很樂意在這個問題上得到一些幫助。我有一個目錄充滿了標記文件(擴展名爲.xft)。我需要通過將字符串文字和文件名(不帶文件擴展名)添加到每個文件來修改這些文件。用PowerShell中的字符串文字和文件名替換文本文件中的字符串

例如,我目前有:

<headerTag> 
<otherTag>Some text here </otherTag> 
<finalTag> More text </finalTag> 

我需要落得是:

<modifiedHeaderTag> 
<secondTag> filenameGoesHere </secondTag> 
<otherTag>Some text here </otherTag> 
<finalTag> More text </finalTag> 

因此,在這個例子中,

"<modifiedHeaderTag> 
<secondTag>" 

將是我的第一次字符串文字(這是一個插入同一地點的每個文件中的常量),

filenameGoesHere 

將是可變的字符串(每個文件的名稱),並且

"</secondTag>" 

將是我的第二恆定字符串文字。

我是能夠成功地替換文本使用:

(Get-Content *.xft).Replace("<headerTag>", "<modifiedHeaderTag>") 

然而,當我試圖

(Get-Content *.xft).Replace("<headerTag>", "<modifiedHeaderTag> `n 
<secondTag> $($_.Name) </secondTag>") 

我剛剛得到一個錯誤信息。用${$_.Name)代替$($_.Name)也沒有效果。

我試過其他的東西,但是這種方法是最接近成功的。我將不勝感激任何幫助,我可以得到。這可能很簡單,我只是沒有看到由於Powershell缺乏經驗而發生的事情,所以一個助手會很棒。

如果上述不夠清楚,我會很樂意提供更多信息,請讓我知道。感謝大家!

+1

_I只是得到了一個錯誤message._。你應該包括,所以我們不必猜測 – Matt

+0

你的替換應該工作正常。你不顯示你正在使用的循環。 – Matt

回答

0

這裏是我的方法,假設你擁有所有的XFT的一個文件夾中,並且希望將更新寫回同一個文件:

$path = "C:\XFTs_to_Modify" 

$xfts = Get-ChildItem $path -Include "*.xft" 

foreach ($xft in $xfts) { 
    $replace = "<modifiedHeaderTag> 
<secondTag> $($xft.Name) </secondTag>" 
    (Get-Content *.xft).Replace("<headerTag>", $replace) | Set-Content $xft.FullName -Force 
} 
相關問題