Powershell:替换文件中的子字符串时出错

Powershell: Error while replacing the sub-string in a file

我正在尝试用多个文件中的一些值替换一些子字符串。我为此编写了这段代码。

$dirPath = 'C:\repos\sync_cpc_cva\ExpressV2\Parameters\AG08\KeyVault'
$ConfigPath = 'C:\repos\sync_cpc_cva\config.json'

$lookupTable = @{}
(Get-Content -Raw -Path $configPath | ConvertFrom-Json).psobject.properties | Foreach { $lookupTable[$_.Name] = $_.Value }

Get-ChildItem -Path $dirPath -Recurse -Filter *.json | 
Foreach-Object {
    
    Get-Content $_.FullName | ForEach-Object {
        $line = $_
        
        $lookupTable.GetEnumerator() | ForEach-Object {
            
            if($line -match $_.Key) {
                
                $line = $line -replace $_.Key, $_.Value
                
            }
        }
        $line
    } | Set-Content -Path $_.FullName
}

如果我打印内容,它已经正确替换了所有值,但是无法将内容设置到同一个文件中。 运行 代码时出现以下错误:

Set-Content : The process cannot access the file
'C:\repos\sync_cpc_cva\ExpressV2\Parameters\AG08\KeyVault\KeyVault.USNat.json' because it is being used by another process.
At C:\repos\sync_cpc_cva\filltest.ps1:22 char:9
+     } | Set-Content -Path $_.FullName
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-Content], IOException
    + FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.SetContentCommand

知道如何替换同一文件中的子字符串吗?

您有几个内部 foreach-object 循环,因此您在使用时修改了 $_ 运算符。我认为这行不通。像这样旋转它:

$lookupTable = @{}
(Get-Content -Raw -Path $configPath | ConvertFrom-Json).psobject.properties | Foreach { $lookupTable[$_.Name] = $_.Value }

$files = Get-ChildItem -Path $dirPath -Recurse -Filter *.json

foreach ($file in $files) {
    $content = Get-Content $file.FullName
    for($i=0;$i -lt $content.length; $i++) {
        $lookupTable.GetEnumerator() | ForEach-Object {
            $content[$i] = $content[$i] -replace $_.Key, $_.Value
        }

    }
    $content | Set-Content $file.FullName

}