2016-07-19 2 views
0

Я использую ниже Powershell скрипт для поиска и замены, который работает отличнопоиск и замену с помощью PowerShell

$files = Get-ChildItem 'E:\replacetest' -Include "*.txt" -Recurse | ? {Test-Path $_.FullName -PathType Leaf} 

foreach($file in $files) 
{ 
    $content = Get-Content $file.FullName | Out-String 
    $content| Foreach-Object{$_ -replace 'hello' , 'hellonew'` 
           -replace 'hola' , 'hellonew' }| Out-File $file.FullName -Encoding utf8  
} 

Проблема заключается сценарий также изменяет файлы, которые не имеют соответствия текста в нем. Любые указатели на то, как игнорировать файлы, у которых нет соответствующего текста?

+0

Есть ли возможность игнорировать несколько подходящих текстов. Например, файл также состоит из путей к файлу, таких как c: /hola/hello.xml. Я хочу включить регулярное выражение или условие, чтобы не изменять hola, когда он находится между/hola /, или если это имя файла как hello.xml и изменить другие атрибуты. – user2628187

ответ

1

У вас есть дополнительные foreach и вам нужно if заявление:

$files = Get-ChildItem 'E:\replacetest' -Include "*.txt" -Recurse | ? {Test-Path $_.FullName -PathType Leaf} 

foreach($file in $files) 
{ 
    $content = Get-Content $file.FullName | Out-String 
    if ($content -match 'hello' -or $content -match 'hola') { 
    $content -replace 'hello' , 'hellonew'` 
      -replace 'hola' , 'hellonew' | Out-File $file.FullName -Encoding utf8  
    } 
} 
2

Вы можете использовать матч, чтобы увидеть, если содержание на самом деле изменилось. Поскольку вы всегда писали, используя файл, файл был бы изменен.

$files = Get-ChildItem 'E:\replacetest' -Include "*.txt" -Recurse | Where-Object {Test-Path $_.FullName -PathType Leaf} 

foreach($file in $files) { 
    $content = Get-Content $file.FullName | Out-String 
    if ($content -match ' hello | hola ') { 
     $content -replace ' hello ' , ' hellonew ' ` 
       -replace ' hola ' , ' hellonew ' | Out-File $file.FullName -Encoding utf8 
     Write-Host "Replaced text in file $($file.FullName)" 
    }  
} 
+0

Можно ли выводить файлы, которые скрипт модифицирует? – user2628187

+0

Да. Я обновлю его –

+0

Спасибо большое ... – user2628187

Смежные вопросы