我有一个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)
答案 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
}