Powershell - 查找和替换

Powershell - Find and Replace

我写了以下内容:

$Path = "C:\"
$Folders = Get-ChildItem $Path | Where-Object {$_.mode -match "d"}

$FolderName = @()
$Folders | ForEach-Object { $FolderName += $_.name }

ForEach ($Name in $FolderName) {

$File = "C:$Name\file.xaml"
$Content = Get-Content $File

$A = "ValueA"
$B = "ValueB"
$C = "ValueC"
$D = "ValueD"

$Content | ForEach-Object {$_ -Replace $A, $B} | Set-Content $File
$Content | ForEach-Object {$_ -Replace $C, $D} | Set-Content $File

}

但是,第一次查找和替换不起作用。我以为这是因为我要查找的实际字符串相当大,但如果我在程序中什么都不做,然后注释掉第二个查找和替换操作,第一个就开始工作了。谁能看出这是为什么?非常感谢!

您需要先刷新 $Content,然后再进行第二次查找和替换。目前,您在第一次调用 Set-Content 时设置了文件的内容,但变量 $Content 仍然包含文件的旧内容。如果你在第二次调用之前再次调用 $Content = Get-Content $File,你应该是金色的。

假设您的问题不是值彼此重叠,您正在将相同的源内容写回文件。您应该合并这两行 Set-Content

$Content | ForEach-Object {$_ -Replace $A, $B -Replace $C, $D} | Set-Content $File