Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 文件中的字符串替换仅保留最后一次更改_Powershell_Loops_Logic - Fatal编程技术网

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
}