0

好的,所以我试图解决这个问题,但我得到的只是一个大头痛。我想做的是替换两个文件夹中三个驱动程序文件中的特定文本字符串。问题是我不能在命令中给出确切的路径,因为它会改变并且文件名也可能会改变。问题是 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

4

1 回答 1

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 指出的错误

于 2013-11-12T20:38:34.747 回答