Заменить текст для всех файлов в каталоге - PullRequest
0 голосов
/ 12 июня 2019

Я написал приведенный ниже условный скрипт, чтобы просмотреть файлы в каталоге и заменить один текст во всех файлах, только если файл содержит слово «Здоровье»

cd -Path "\\shlhfilprd08\Direct Credits\Temp2"
ForEach ($file in (Get-ChildItem -Path "\\shlhfilprd08\Direct Credits\Temp2"))
{
$filecontent = Get-Content -path $file -First 1
if($filecontent -like '*Health*'){$filecontent = $filecontent -replace 'TEACHERF','UniHlth '}
Set-Content $file.PSpath -Value $filecontent 
}

Я сталкиваюсь с двумятакие проблемы, как

  1. Если ($ filecontent -like ' Health '), он заменяет слово в первом необработанном и удаляет другие строки вместе с заменой. Я не хочучто должно случиться

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Можете ли вы попробовать с этим

cd -Path "\\shlhfilprd08\Direct Credits\Temp2"
$configFiles = Get-ChildItem . *.config -rec
foreach ($file in $configFiles)
 {
  (Get-Content $file.PSPath) |
   Foreach-Object { $_ -replace "TEACHERF", "UniHlth " } |
   Set-Content $file.PSPath
}
0 голосов
/ 12 июня 2019

Я бы попробовал это; у меня это сработало в небольшом файле (сделайте небольшую копию нескольких данных в новую папку и протестируйте ее там)

$path = "\\shlhfilprd08\Direct Credits\Temp2"
$replace ="TEACHERF" #word to be replaced
$by = "UniHlth " #by this word (change $replace by $by)


gci $path -file | %{
    foreach($line in $(Get-content $_.Fullname)){
        if($line -like $replace){
            $newline = $line.Replace($($replace),$($by))
            Set-Content $_.FullName $newline
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...