PowerShell代码段不替换所有字符

时间:2015-07-29 19:39:43

标签: powershell code-snippets

我有一个PowerShell脚本,在我的生活中似乎并不想完全工作。我正在将日志文件从Tab Delimited转换为CSV并删除特殊字符=,以防止在Excel中打开文件时发生意外打扰。这是我的代码,在查看StackOverflow上的其他示例时,它似乎是一致的。我无法理解。

foreach( $DecodedFile in (Get-ChildItem 'C:\Users\rybrow\Desktop\Picnic Data\' -Recurse -Filter "*.decoded.txt" -File) ) {
    $path = $DecodedFile.FullName # "C:\fso\tabDelimited.txt"
    $outPath = $path -replace ".txt",".csv"
    Get-Content -path $path | ForEach-Object {
    '"' + ($_ -replace '=', '' `
    -replace '\t','","') + '"' `
    } |  Out-File -filepath $outPath -Encoding Ascii
}

感谢您一起来帮我解决一下!

[2014-07-01 08:00:17.724]   -ACCESS ACCEPTED    -(hash function took 11.1953 ms, lookup took 0.0041 ms) -1000:cmFmdkcyRVBsdWJyaXVzVW51cTwxNzc2:RPR4hRivNC0GgQWCcv0gWPkhB90= -CARD Number OK 1234567890          CLASS   VERSION VISITOR (no photo)  unused (System)

1 个答案:

答案 0 :(得分:0)

我认为一些括号可以解决您的问题:

foreach( $DecodedFile in (Get-ChildItem 'C:\Users\rybrow\Desktop\Picnic Data\' -Recurse -Filter "*.decoded.txt" -File) ) {
    $path = $DecodedFile.FullName
    $outPath = $path -replace ".txt",".csv"

    Get-Content -path $path | ForEach-Object {
      '"' + (($_ -replace '=', '')  -replace '\t','","') + '"'
    } |  Out-File -filepath $outPath -Encoding Ascii
}

您的代码正在替换空字符串中的所有选项卡,这是一种更强大的方法,因此您不必担心替换双引号就像使用Export-Csv一样:

foreach( $DecodedFile in (Get-ChildItem 'C:\Users\rybrow\Desktop\Picnic Data\' -Recurse -Filter "*.decoded.txt" -File) ) {
    $path = $DecodedFile.FullName
    $outPath = $path -replace ".txt",".csv"

    $csv = Import-Csv $path -Delimiter "`t"
    $csv_cols = $csv | gm -MemberType NoteProperty | Select name -ExpandProperty Name

    $csv | % {
      $row = $_
      $csv_cols | % {
        $row."$_" = $row."$_" -replace '=', ''
      }
    } | Export-Csv $outPath -Encoding Ascii 
}