2016-07-19 23 views
0

ich das unter Powershell-Skript verwenden zu suchen und zu ersetzen, der gut arbeitetSuchen und Ersetzen mit 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  
} 

Das Problem ist, das Skript ändert auch die Dateien, die nicht den passenden Text in ihm haben. Irgendwelche Hinweise, wie man die Dateien ignoriert, die nicht den passenden Text haben?

+0

Gibt es eine Möglichkeit, ein paar übereinstimmende Texte zu ignorieren. Zum Beispiel besteht die Datei auch aus Dateipfaden wie c: /hola/hello.xml. Ich möchte eine Regex oder Bedingung einfügen, um hola nicht zu ändern, wenn es zwischen/hola ist, oder wenn es sich um einen Dateinamen wie hello.xml handelt und die anderen occouerances ändern. – user2628187

Antwort

1

Sie haben einen zusätzlichen foreach bekam, und Sie müssen eine if Aussage:

$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

Sie Spiel verwenden können, um zu sehen, ob der Inhalt tatsächlich geändert wird. Da Sie immer mit Out-File schreiben, wird die Datei modifiziert.

$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

ist es möglich, die Dateien auszugeben, die das Skript bearbeitet? – user2628187

+0

Ja. Ich werde es aktualisieren –

+0

Vielen Dank ... – user2628187