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
我写了以下内容:
$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