$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
}
我的思考过程是,由于我的循环在循环开始时将文件重新读取到内存中,因此它将新的更改读取到内存中,从而可以在不删除我的循环更改的情况下设置新内容。是在先前的迭代中完成的。
我试图更改将文件读入内存的位置(循环外,注入函数内部),但是当前迭代是我能看到脚本的最后注入的最远的地方,所有其他覆盖
答案 0 :(得分:1)
这里的问题是循环迭代期间,您正在读取文件array[0].monthName = 'January';
array[1].monthName = 'February';
array[2].monthName = 'March';
...
并将更改保存到0000000.txt
。由于您在替换字符串后从未读过testfile.txt
,因此看不到更新后的字符串。
答案 1 :(得分:0)
如果我说对了,您要向文件 C:\ utils \ foo \ testfile.txt 中添加新内容,为此,您必须使用Add-Content
cmdlet