首页 > 解决方案 > 文件中的字符串替换仅保留最后一次更改

问题描述

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

我的想法是,因为我的循环在循环开始时将文件重新读取到内存中,所以它将新的更改读入内存,然后它将能够在不删除我的循环中所做的更改的情况下设置新内容以前的迭代。

我试图改变文件读入内存的位置(循环外,注入函数内),但当前迭代是我能看到脚本最后一次注入的最远距离,所有其他的都被覆盖。

标签: powershellloopslogic

解决方案


这里的问题是在循环迭代期间,您正在读取文件0000000.txt并将更改保存到testfile.txt. 由于您在字符串替换后从未阅读testfile.txt过,因此您看不到更新后的字符串。


推荐阅读