【发布时间】:2020-02-27 19:01:16
【问题描述】:
$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
}
我的想法是,因为我的循环在循环开始时将文件重新读入内存,它会将新的更改读入内存,然后它可以在不删除我循环的更改的情况下设置新内容在之前的迭代中制作。
我试图更改文件读入内存的位置(循环外,注入函数内),但当前迭代是我能看到脚本最后一次注入的最远位置,所有其他的都被覆盖.
【问题讨论】:
-
我可能只是太笨了,无法理解发生了什么,但我不明白。您正在读取
0000000.txt,对读取的数据进行更改,然后将更改输出到testfile.txt。testfile.txt将只有最后一次更改$injectpoint的最后一次迭代,这是你不喜欢的?而Set-Content -Append将保留$injectionpoint的每次迭代所做的所有更改,这也是你不喜欢的?您的函数定义也有错误,因为它有参数injectpoint,但实际上在其脚本块中使用了$data。 -
@AdminOfThings 我是个白痴,不是你。我想我在我的逻辑中发现了问题。我真的很感谢你问这个问题。我真的很爱你。当然,我不会正确获取信息,因为我没有将新更改保存到旧文件中。我已经盯着这个看了好几天了,我想我真的只是需要一双新的眼睛。
-
@AdminOfThings 如果你想发布我不会收到我的数据,因为我将它保存到一个新文件而不是我的旧文件,我会接受答案。它总是最简单的解决方案
标签: powershell loops logic