【问题标题】:Find and replace in files fails在文件中查找和替换失败
【发布时间】:2023-03-03 08:03:25
【问题描述】:

我正在尝试使用以下方法在文件中查找和替换。

Function Find-Replace ($FileFullpath, $FindString, $ReplacementString) {

   Get-Content $FileFullpath | 
   Foreach-Object {$_ -replace $FindString, $ReplacementString } |  
   Set-Content $FileFullpath

}

Find-Replace "c:\program files (x86)\MyProj\web.config" $OldServiceName $NewServiceName

但我总是出错。

Set-Content : 进程无法访问文件 'c:\program files (x86)\MyProj\web.config' 因为它正被另一个进程使用。

文件没有在任何地方打开。我认为 Get-content 尚未发布该文件。

为什么会这样?如何在同一个文件中查找和替换没有问题?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    您不能在打开同一个文件时对其进行读写,Get-Content 会打开文件进行读取,同时 Set-Content 会尝试对其进行写入。将 Get-Conetnt 调用放在括号中,它将打开文件,读取其内容并关闭它。

    (Get-Content $FileFullpath) | ...
    

    【讨论】:

    • 我搜索了半个小时的结果,对失败感到沮丧。我提出这个问题并去喝咖啡。现在答案就在这里。几个月前也发生了同样的事情。引人注目的事情又是征费 :)
    • 感谢@Samselvaprabu 很高兴为您提供帮助。你也可以在帮助中找到这个:technet.microsoft.com/en-us/library/dd347736.aspx,看看第三个例子。
    猜你喜欢
    • 2011-07-18
    • 2013-01-11
    • 1970-01-01
    • 2014-08-17
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多