在不知道文件路径时,用PS替换驱动程序文件中的文本字符串

时间:2013-11-12 19:21:54

标签: powershell replace inf

好的,所以我试图绕过这个,但我所得到的只是一个令人头痛的问题。我想要做的是替换两个文件夹中的三个驱动程序文件中的特定文本字符串。问题是我无法在命令中给出确切的路径,因为它会发生变化,文件名也可能会发生变化。问题是PowerShell似乎不能很好地使用通配符(可能是我的错)。 路径例如如下:

C:\AMD\AMD_Catalyst_13.11_BetaV6\Packages\Drivers\Display\WB6A_INF\CU164159.inf

我想用:

C:\AMD\*\Packages\Drivers\Display\WB6A_INF\*.inf

替换以下字符串(包括“”):

"AMD679E.1 = "AMD Radeon HD 7800 Series"

使用:

"AMD679E.1 = "AMD Radeon HD 7930"

在3个单独的.inf文件中,然后将更改保存到这些文件(没有新文件)。 没有过于复杂的脚本是否可行或我要求的太多? 顺便说一句,这也适用于PS v2.0

1 个答案:

答案 0 :(得分:2)

第一步是找到文件:

$foundFiles = Get-ChildItem -File C:\AMD\*\Packages\Drivers\Display\WB6A_INF\*.inf

然后,遍历文件,阅读内容,并应用替换:

foreach ($file in $foundFiles)
{
    $lines = Get-Content $file
    $replaced = $lines -replace '"AMD679E\.1 = "AMD Radeon HD 7800 Series"','"AMD679E.1 = "AMD Radeon HD 7930"'
    $replaced | Set-Content $file
}

请注意在-replace中使用单引号,因为您的原始字符串包含双引号。还要注意你需要逃脱'。'在正则表达式。

当然,您可以使用管道将所有这些缩短为一行。

编辑:修复@AdiInbar指出的错误