I want to replace a line in a text file that starts with the value STRING: . I want to replace this line for each text file with STRING: followed by the filename without extension.
$src = "C:\Input"
Get-ChildItem $src -recurse -include *.mi |
Select -expand fullname |
ForEach-Object {
(Get-Content $_) -replace "STRING: . ","STRING: $($_.BaseName)" |
Set-Content $_
}
The script I have doesn't add the filename, it only replaces the line with STRING:
STRING: text to be replaced
changes into
STRING:
while it should be
STRING: filename
How can I include the filename in the replacement action?
CodePudding user response:
Simply remove the Select -expand fullname command so you have the full FileInfo object, which is output of Get-ChildItem, available through $_ within the ForEach-Object script block:
$src = "C:\Input"
Get-ChildItem $src -file -recurse -include *.mi |
ForEach-Object {
(Get-Content $_.FullName) -replace "STRING: . ","STRING: $($_.BaseName)" |
Set-Content $_.FullName
}
I've also added -file switch to Get-ChildItem to be explicit about what we want it to return. There could be folders named like *.mi, which might not be an issue in your case, but in general using -file is safer.
