6

ファイルの内容を検索し、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 ($filenames の $file) {$outfile = "$file" + ".txt"
    Get コンテンツ $file | Foreach オブジェクト {
            $_ -replace $CR,"`r`n" `
             -replace [char]3,"|" `
             -replace [char]1,"{" `
             -replace "\\","\\" `
        } | Set-Content -encoding "UTF8" $outfile}
4

3 に答える 3

6

この式:

@("[char]3 [char]0 [char]2 [char]3 [char]1")

...単一の要素で配列を作成します。5項目の配列が本当に必要な場合は、用語の間にコンマが必要ですが、とにかく配列をサポートしていません。また、単一の要素には、入力したリテラル文字が含まれています。あなたが期待したものではありません。-replace

必要なのは、フィード先の単純な文字列を作成すること-replaceです。印刷できない文字を扱う場合、これはもう少し複雑です。あなたは正しい考えを持っていました-$()各式の表記を使用して文字列内のコード式を補間するようにPowerShellに指示する必要があります:

$CR = "$([char]3)$([char]0)$([char]2)$([char]3)$([char]1)"
于 2013-03-13T18:52:24.247 に答える
0

このようなことを行うスクリプトに関数があります。これが役立つかどうかわからない:

# This function will make a new file that has custom comments
# it will comment out "rollback tran"
# it will uncomment out "--commit tran"
function CommentAndUncomment($TheScript)
{
    PrintTextAndTime("About to run this SQL file: $TheScript")
    PrintTextAndTime("Will comment out 'rollback tran' and uncomment '--commit tran'")
    $content = Get-Content $TheScript
    $content | 
      ForEach-Object { 
        if ($_ -clike "*ROLLBACK TRAN;*") { 
          $_ -replace "ROLLBACK TRAN;", "--ROLLBACK TRAN;"
        } 
        elseif ($_ -clike "*--COMMIT TRAN;*") { 
          $_ -replace "--COMMIT TRAN;", "COMMIT TRAN;"
        }
        else{
            $_
        }
      } | 
      Set-Content $ModifiedCommentsFile
    echo $ModifiedCommentsFile
    sqlcmd -i $ModifiedCommentsFile
    del $ModifiedCommentsFile
}
于 2013-03-11T16:55:55.847 に答える