特定のディレクトリの下にあるすべてのファイルとフォルダーを調べて、.properties ファイル内の特定の単語のすべてのインスタンスを別の特定の単語のインスタンスに変更する powershell スクリプトを作成しようとしています。
以下に書いたことはこれを行いますが、私のバージョン管理は、変更する単語のインスタンスが含まれているかどうかに関係なく、すべてのファイルの変更に気づきます。これに対抗するために、コンテンツを取得/設定する前に、単語がファイルに存在するかどうかを確認するチェックを入れようとしましたが (以下を参照)、[System.Object[]] に含まれていないことがわかります。 「Contains」という名前のメソッド。これは $_ が配列であることを意味していると想定したので、ループを作成してループを作成し、一度に各ファイルをチェックしようとしましたが、System.IO.FileInfo 型のオブジェクトにインデックスを付けることができないと言われました。
以下のコードを変更して、ファイルに wordToChange が含まれているかどうかを確認し、その変更を適用する方法を教えてください。
$directoryToTarget=$args[0]
$wordToFind=$args[1]
$wordToReplace=$args[2]
Clear-Content log.txt
Get-ChildItem -Path $directoryToTarget -Filter *.properties -Recurse | where { !$_.PSIsContainer } | % {
If((Get-Content $_.FullName).Contains($wordToFind))
{
Add-Content log.txt $_.FullName
(Get-Content $_.FullName) |
ForEach-Object { $_ -replace $wordToFind , $wordToReplace } |
Set-Content $_.FullName
}
}
ありがとうございました!