用powershell

时间:2017-05-04 23:44:03

标签: string powershell

我的google-fu让我失望了,所以我很乐意在这个问题上得到一些帮助。我有一个充满标记文件的目录(扩展名.xft)。我需要通过向每个文件添加字符串文字和文件名(没有文件扩展名)来修改这些文件。

例如,我目前有:

<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 个答案:

答案 0 :(得分: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
}