查找并替换位于通配符路径中的特定文件类型中的特定字符串

时间:2017-07-26 17:39:19

标签: string powershell replace find wildcard

问题:

使用PowerShell更新在部分路径的子文件夹中找到的众多配置文件中的特定字符串。

扩展详情:

我有多个配置文件需要更新特定的字符串;但是,我不知道这些文件的名称,必须从部分路径开始搜索。我必须扫描每个文件以获取特定字符串。然后我必须用新字符串替换旧字符串,但我必须确保它以原始名称保存文件并在找到它的相同位置。我还必须能够显示脚本的结果(受影响的文件数量及其名称/路径)。最后,这一切都必须在PowerShell中完成。

到目前为止,我自己想出了以下内容:

$old = "string1"
$new = "string2"

$configs = Get-ChildItem -Path C:\*\foldername\*.config -Recurse
$configs | %{(Get-Content $_) -Replace $old, $new | Set-Content $_FullName

当我运行时,似乎发生了一些事情。 如果文件是打开的,他们会告诉我他们被其他程序修改过。 然而,似乎没有任何改变。

我也尝试过以下代码的各种修改。令我沮丧的是,它似乎只是打开并保存每个文件而不是实际进行我希望发生的更改。

$configFiles = GCI -Path C:\*\Somefolder\*.config -Recurse
foreach ($config in $configFiles) {
    (GC $config.PSPath) | ForEach-Object {
        $_ -Replace "oldString", "newString"
   } | Set-Content $config.PSPath)
}

为了进一步激怒这个问题,我对指定字符串执行简单搜索的所有尝试似乎也给我带来了问题。

与其他几个人讨论,并根据通过SO学到的知识...以下代码应该返回结果:

GCI -Path C:\*\Somefolder\*.config -Recurse |
    Select-String -Pattern "string" |
    Select Name

然而,似乎没有任何事情发生。我不知道我是否遗漏了某些东西,或者代码本身是不是错了......

我所研究和尝试的一些类似的问题可以在以下链接中找到:

更新: 有可能我被特殊人物如挫败了 +和/。例如,我的字符串可能是:" s + r / ng"

我已经应用了PowerShell所说的转义字符,但似乎这也无济于事。

Replacing a text at specified line number of a file using powershell

Find and replacing strings in multiple files

PowerShell Script to Find and Replace for all Files with a Specific Extension

Powershell to replace text in multiple files stored in many folders

我将继续研究并继续进行修改。我一定会记下任何能让我达到目标甚至更近一步的东西。提前谢谢大家。

0 个答案:

没有答案