替换目录中所有文件的文本

时间:2019-06-12 05:38:32

标签: powershell

我编写了以下条件脚本,以遍历目录中的文件并仅在文件包含“健康”一词时替换所有文件中的一个文本

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 '),它替换了第一个原始单词,并删除了其他行以及replace。我不希望那样发生
  2. 我将设置内容设置为路径被拒绝,错误消息是文件内容不包含运行状况文本

2 个答案:

答案 0 :(得分:2)

您可以尝试

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
}

答案 1 :(得分:0)

我会尝试的;它对我有用一点 (将一些数据的小副本复制到新文件夹中,然后在其中进行测试)

$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
        }
    }
}