文件中的字符串替换仅保留最后的更改

时间:2020-02-27 19:01:16

标签: powershell loops logic

        $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
}

我的思考过程是,由于我的循环在循环开始时将文件重新读取到内存中,因此它将新的更改读取到内存中,从而可以在不删除我的循环更改的情况下设置新内容。是在先前的迭代中完成的。

我试图更改将文件读入内存的位置(循环外,注入函数内部),但是当前迭代是我能看到脚本的最后注入的最远的地方,所有其他覆盖

2 个答案:

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

相关问题