我的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经验,我只是没有看到什么,所以伸出援助之手会很棒。
如果上述内容不够清楚,我很乐意提供更多信息,请告诉我。感谢大家!
答案 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
}