# Will generate C:\Temp\SomeFile_nd.txt:
Remove-Diacritic.ps1 -Path C:\Temp\SomeFile.txt
# Will generate C:\Temp\NoDiacritic.txt:
Remove-Diacritic.ps1 -Path C:\Temp\SomeFile.txt -NewName NoDiacritic.txt
[CmdletBinding(DefaultParameterSetName='Suffix')]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('FullName')]
[String]$Path,
[Parameter(Position=1, Mandatory=$true, ParameterSetName='NewName')]
$NewName,
[Parameter(Position=1, ParameterSetName='Suffix')]
$Suffix = '_nd',
[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]$Encoding = 'UTF8'
)
Begin {
Function Remove-Diacritic {
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][AllowEmptyString()]
[String[]]$String
)
Begin {
$stringBuilder = New-Object -TypeName System.Text.StringBuilder
}
Process {
$String | ForEach-Object {
[void]$stringBuilder.Clear()
$_.Normalize([System.Text.NormalizationForm]::FormD).ToCharArray() |
Where-Object {[Globalization.CharUnicodeInfo]::GetUnicodeCategory($_) -ne [Globalization.UnicodeCategory]::NonSpacingMark} |
ForEach-Object {[void]$stringBuilder.Append($_)}
$stringBuilder.ToString()
}
}
}
}
Process {
$item = Get-Item -Path $Path
If ($PSCmdlet.ParameterSetName -eq 'NewName') {
$newPath = Join-Path -Path $item.DirectoryName -ChildPath $NewName
} Else {
$newPath = Join-Path -Path $item.DirectoryName -ChildPath "$($item.BaseName)$($Suffix)$($item.Extension)"
}
Write-Verbose "Removing diacritics from '$($item.FullName)' ..."
Get-Content -Path $item.FullName -Encoding $Encoding | Remove-Diacritic | Set-Content -Path $newPath -Encoding $Encoding
Write-Verbose "... saved as '$($newPath)'"
}
https://www.experts-exchange.com/questions/29174458/Query-Help-possible-VBA-solution-Array.html?anchorAnswerId=43042006#a43042006
In your case, we would want to create an array of [regex] objects that would each identify all the upper ASCII characters for a (desired) lower ASCII character. For each line/object, you would loop through these regex objects and replace the matches with the desired/associated lower ASCII character.
Note: In the linked comment, I am including the lower ASCII character, because we were looking for a match, not a replacement. You would not have lower ASCII characters in your regex patterns.