Я пытаюсь создать сценарий powershell, который просматривает все файлы и папки в заданном каталоге, а затем изменяет все экземпляры заданного слова в файлах .properties экземпляру другого данного слова.Powershell, используя содержит, чтобы проверить, содержат ли файлы определенное слово
То, что я написал ниже, делает это, однако мой контроль версий замечает изменение в каждом отдельном файле независимо от того, содержит ли он экземпляр слова для изменения. Чтобы противостоять этому, я попытался проверить, присутствует ли слово или нет в файле, прежде чем я получу/настрою содержимое (показано ниже), однако он сообщает мне, что [System.Object []] не содержит метод «Содержит». Я предположил, что это означает, что $ _ был массивом, поэтому я попытался создать цикл, чтобы пройти через него, и проверить каждый файл за раз, но он сказал мне, что это невозможно индексировать в объект типа 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
}
}
Спасибо!
Обратите внимание, что вы загружаете файл дважды, рассматриваете загрузку в переменную и выполняете -contains и -replace против переменной, может немного ускориться ... –