Powershell 文件中的字符串替换仅保留最后一次更改
我的思考过程是,因为我的循环在循环开始时将文件重新读取到内存中,它将把新的更改读取到内存中,然后它将能够设置新内容,而无需删除我的循环在上一次迭代中所做的更改Powershell 文件中的字符串替换仅保留最后一次更改,powershell,loops,logic,Powershell,Loops,Logic,我的思考过程是,因为我的循环在循环开始时将文件重新读取到内存中,它将把新的更改读取到内存中,然后它将能够设置新内容,而无需删除我的循环在上一次迭代中所做的更改 我试图更改文件读入内存的位置(在循环外部,在注入函数内部),但当前迭代是我能看到的最远的地方,我的脚本的最后一次注入,所有其他的都被覆盖。如果我没弄错,您想向文件添加新内容C:\utils\foo\testfile.txt,为此,您必须使用addcontentcmdlet这里的问题是在循环迭代期间,您正在读取文件0000000.txt,并
我试图更改文件读入内存的位置(在循环外部,在注入函数内部),但当前迭代是我能看到的最远的地方,我的脚本的最后一次注入,所有其他的都被覆盖。如果我没弄错,您想向文件添加新内容C:\utils\foo\testfile.txt,为此,您必须使用
addcontent
cmdlet这里的问题是在循环迭代期间,您正在读取文件0000000.txt
,并将更改保存到testfile.txt
。由于在字符串替换之后您从未读取过testfile.txt
,因此您看不到更新的字符串。添加内容,将整个文件附加到该文件中。我想要的是只保留对字符串的更改,但它们当前正在被覆盖。为了获得更多的澄清,我正在进行大量的就地字符串替换,以保存更改,然后转到需要进行的下一次替换。感谢您抽出时间回答我的问题,不过,我非常感谢。您阅读了一个文件获取内容C:\utils\foo\0000000.txt
,然后对其进行了一些更改,并将内容写入另一个文件C:\utils\foo\testfile.txt
,您能解释一下您有哪些输入和输出<以及等待哪些输出吗?脚本中的第一个文件内容始终相同,设置内容始终重写第二个文件。我需要解释一下你们想要什么样的输出。我可能太笨了,无法理解到底发生了什么,但我不明白。您正在读取0000000.txt
,对读取的数据进行更改,然后将更改输出到testfile.txt
testfile.txt
只会在上次迭代$injectpoint
时更改最后一件事,这是您不喜欢的?而Set Content-Append
将保留$injectionpoint
每次迭代所做的所有更改,这也是您不喜欢的?您的函数定义也有错误,因为is有参数injectpoint
,但实际上在其脚本块中使用了$data
。@AdminOfThings我是个白痴,不是你。我想我在逻辑上解决了这个问题。我真的很感激你问这个问题。我非常爱你。当然,我无法正确获取信息,因为我没有将新更改保存到旧文件中。我已经盯着这个看了好几天了,我想我真的需要一双新眼睛。如果你想发布我不会收到数据的消息,因为我正在将数据保存到一个新文件而不是旧文件中,我会接受答案。这永远是最简单的解决方案
$injectpoint = %{ [Regex]::Matches($file, "DMG>D8>$dob.+?REF>EA>$mrn") } | %{ $_.Value }
foreach ($data in $injectpoint)
{
$file = Get-Content C:\utils\foo\0000000.txt
inject $file $eth $race $lang $data $dob
}
}
}
function inject($file, $eth, $race, $lang, $injectpoint, $dob)
{
Set-Location C:\utils\boo\
$injector = "$race" + ":" + $eth + ":" + $lang
$newString = $data -replace "DMG>D8>$dob", "DMG>D8>$dob>$injector"
$file.Replace($data, $newString) | Set-Content C:\utils\foo\testfile.txt
}