2017-05-04 94 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 
} 
相关问题