I’m trying to move any word after #DINDEX (unknown word) Line #8 up to Line #3, then replace the word in quotes after #BQUEUE with the new word in quotes.
Example: #BATCH #BLABEL “BDI_Cmore_Results_AH Oct 07 20” #BQUEUE “RELMAGQ” ---------- Delete the second word #DOCUMENT #DINDEX GE #DINDEX MR1111111 #DINDEX 119998891 #DINDEX PFT ---------- Move the second (Unknown word) to line 3 then place in quotes
I am really not sure I follow your logic here, but, are you saying you are trying to from this…
(Through not as elegant as it can be and only targeting one word)
Clear-Host
“Original file *********`n”
($BatchFileData = (Get-Content -Path ‘D:\Scripts\PowerShellTips\BatchTextFIle.txt’) )
“`n”
Write-Warning -Message ‘Replacing line3 2nd word with 2nd word from line8 and removing 2nd word from line8’
(
$BatchFileData `
-replace (($BatchFileData[2] -split ’ ')[2],($BatchFileData[7] -split ’ ')[2])) `
-replace ($BatchFileData[7]),($BatchFileData[7] -split ’ ')[0…1]
Results
Original file *********
#BATCH #BLABEL “BDI_Cmore_Results_AH Oct 07 20” #BQUEUE “RELMAGQ” “BQUEUE2ndWord” #DOCUMENT #DINDEX GE #DINDEX MR1111111 #DINDEX 119998891 #DINDEX PFT “DDINDEX2ndWord”
WARNING: Replacing line3 2nd word with 2nd word from line8 and removing 2nd word from line8 #BATCH #BLABEL “BDI_Cmore_Results_AH Oct 07 20” #BQUEUE “RELMAGQ” “DDINDEX2ndWord” #DOCUMENT #DINDEX GE #DINDEX MR1111111 #DINDEX 119998891 #DINDEX PFT
$Files = Get-ChildItem c:\BDITest2\ -Recurse -Include *.ierl
foreach ($File in $Files) {
$myContent = Get-Content $File
if ($myContent.Count -ne 8) { throw "Error: file ($File) has ($($myContent.Count)) lines - expecting (8)" }
$DesiredWord = $myContent[7].Split(' ')[1]
"Identified desired word in line 8 as ($DesiredWord)" # You can comment this line
$ReplacementLine3 = "#BQUEUE ""$DesiredWord"""
"Changing line 3 from ($($myContent[2])) to ($ReplacementLine3)" # You can comment this line
$myContent[2] = $ReplacementLine3
"Writing back to file ($File)" # You can comment this line
$myContent | Out-File $File -Force
}