Powershell:查找/替换ASCII控制字符的模式

Jer*_*ton 5 powershell scripting ascii control-characters

我正在尝试编写一个脚本来搜索文件的内容,当它遇到一组ASCII控制字符时,插入一个CR/LF.

我要替换的字符模式是[ETX] [NUL] [STX] [ETX] [SOH]

    $filenames = @(Get-Childitem "E:\VendorFiles\*")

    $CR = @("[char]3 [char]0 [char]2 [char]3 [char]1")
    foreach ($file in $filenames) {$outfile = "$file" + ".txt"
    Get-Content $file | Foreach-object {
            $_ -replace $CR,"`r`n" `
             -replace [char]3,"|" `
             -replace [char]1,"{" `
             -replace "\\","\\" `
        } | Set-Content -encoding "UTF8" $outfile}

Mic*_*ens 6

这个表达式:

@("[char]3 [char]0 [char]2 [char]3 [char]1")
Run Code Online (Sandbox Code Playgroud)

...创建一个包含单个元素的数组.如果你真的想要一个包含5个项目的数组,但是无论如何都不支持数组,你需要在术语之间使用逗号.此外,您的单个元素包含您键入的文字字符; 不是你所期望的.-replace

你需要的是创建一个简单的字符串来提供-replace; 当您处理不可打印的字符时,这会更复杂一些.你有正确的想法 - 你只需要告诉PowerShell使用$()每个表达式上的符号在字符串中插入代码表达式:

$CR = "$([char]3)$([char]0)$([char]2)$([char]3)$([char]1)"
Run Code Online (Sandbox Code Playgroud)