Quantcast
Channel: PowerShell.org » All Posts
Viewing all articles
Browse latest Browse all 13067

Reply To: Help needed doing a find/replace on a group of text files

$
0
0

I modified your script to make it easier for me to test and troubleshoot :

$TextFiles = @('C:\Test.txt',
			'C:\Test2.txt'
		)
foreach ($FilePath in $TextFiles) {
  Write-Output "Searching for string in $FilePath"
  $Content = Get-Content $FilePath
  if ($Content -match 'mdt-01') {
    Write-Output "Found mdt-01 match in $FilePath"
    Write-Output "`$Content is : `r`n $Content"
    $NewContent = $Content | % { $_.Replace('mdt-01', 'replacethis') }
    Write-Output "And after the Replace for mdt-01, `$NewContent is now : `r`n $NewContent"
 
    # Set-Content -Path $FilePath -Value $NewContent
  }
  if ($Content -match 'MDT-01') {
    Write-Output "`$Content is : `r`n $Content"
    $Content = $Content | % { $_.Replace('MDT-01', 'replacethis') }
    Write-Output "And after the Replace for MDT01, `$Content is now : `r`n $Content"
 
    # Set-Content -Path $FilePath -Value $Content
  }
}

Here is the ouput :

Searching for string in C:\Test.txt
Found mdt-01 match in C:\Test.txt
$Content is :
WSUSServer=http://mdt-01:8530 blablabla WSUSServer=http://MDT-01:8530
And after the Replace for mdt-01, $NewContent is now :
WSUSServer=http://replacethis:8530 blablabla WSUSServer=http://MDT-01:8530
$Content is :
WSUSServer=http://mdt-01:8530 blablabla WSUSServer=http://MDT-01:8530
And after the Replace for MDT01, $Content is now :
WSUSServer=http://mdt-01:8530 blablabla WSUSServer=http://replacethis:8530
Searching for string in C:\Test2.txt
Found mdt-01 match in C:\Test2.txt
$Content is :
WSUSServer=http://mdt-01:8530 blablabla Test2 WSUSServer=http://MDT-01:8530
And after the Replace for mdt-01, $NewContent is now :
WSUSServer=http://replacethis:8530 blablabla Test2 WSUSServer=http://MDT-01:8530
$Content is :
WSUSServer=http://mdt-01:8530 blablabla Test2 WSUSServer=http://MDT-01:8530
And after the Replace for MDT01, $Content is now :
WSUSServer=http://mdt-01:8530 blablabla Test2 WSUSServer=http://replacethis:8530

So, we can see that the string "mdt-01" is indeed replaced.
But at the beginning of the second If statement ( the one looking for "MDT-01"), we see that $Content is back to its original value.
Your first change (the replacement of "mdt-01" by "replacethis") has been discarded.
This is because you stored this change in the variable $NewContent, and then, at the beginning of the second If statement, you go back to using $Content.

So, if we stop using $NewContent and work only with $Content, like so :

$TextFiles = @('C:\Test.txt',
			'C:\Test2.txt'
		)
foreach ($FilePath in $TextFiles) {
  Write-Output "Searching for string in $FilePath"
  $Content = Get-Content $FilePath
  if ($Content -match 'mdt-01') {
    Write-Output "Found mdt-01 match in $FilePath"
    Write-Output "`$Content is : `r`n $Content"
    $Content = $Content | % { $_.Replace('mdt-01', 'replacethis') }
    Write-Output "And after the Replace for mdt-01, `$Content is now : `r`n $Content"
 
    # Set-Content -Path $FilePath -Value $NewContent
  }
  if ($Content -match 'MDT-01') {
    Write-Output "`$Content is : `r`n $Content"
    $Content = $Content | % { $_.Replace('MDT-01', 'replacethis') }
    Write-Output "And after the Replace for MDT01, `$Content is now : `r`n $Content"
 
    # Set-Content -Path $FilePath -Value $Content
  }
}

Now, the first change is kept and both 'mdt-01' and 'MDT-01' are replaced in the final output :

Searching for string in C:\Test.txt
Found mdt-01 match in C:\Test.txt
$Content is :
WSUSServer=http://mdt-01:8530 blablabla WSUSServer=http://MDT-01:8530
And after the Replace for mdt-01, $Content is now :
WSUSServer=http://replacethis:8530 blablabla WSUSServer=http://MDT-01:8530
$Content is :
WSUSServer=http://replacethis:8530 blablabla WSUSServer=http://MDT-01:8530
And after the Replace for MDT01, $Content is now :
WSUSServer=http://replacethis:8530 blablabla WSUSServer=http://replacethis:8530
Searching for string in C:\Test2.txt
Found mdt-01 match in C:\Test2.txt
$Content is :
WSUSServer=http://mdt-01:8530 blablabla Test2 WSUSServer=http://MDT-01:8530
And after the Replace for mdt-01, $Content is now :
WSUSServer=http://replacethis:8530 blablabla Test2 WSUSServer=http://MDT-01:8530
$Content is :
WSUSServer=http://replacethis:8530 blablabla Test2 WSUSServer=http://MDT-01:8530
And after the Replace for MDT01, $Content is now :
WSUSServer=http://replacethis:8530 blablabla Test2 WSUSServer=http://replacethis:8530


Viewing all articles
Browse latest Browse all 13067

Trending Articles