0

わかりましたので、これについて頭を包み込もうとしましたが、私が得たのは大きな頭痛だけです。私がしたいのは、2 つのフォルダーにある 3 つのドライバー ファイルの特定のテキスト文字列を置き換えることです。問題は、コマンドで正確なパスを指定できないことです。パスが変更され、ファイル名も変更される可能性があるためです。問題は、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 での一重引用符の使用に注意してください。また、「.」をエスケープする必要があることに注意してください。正規表現で。

もちろん、パイプラインを使用してこれらすべてを 1 行に短縮できます。

編集:@AdiInbarが指摘したエラーを修正

于 2013-11-12T20:38:34.747 に答える