在PowerShell中重新格式化CSV文件

时间:2017-07-10 09:48:34

标签: powershell csv

我有一个格式良好的CSV文件,我想阅读,同时重新格式化一些值。由于某种原因,下面的代码不起作用($csv变量最终为空):

$csv = Import-Csv "result.log" -Delimiter "|" | ForEach-Object {
    $_.PSObject.Properties.Value | ForEach-Object {
        if ($_ -like '*---*') { $_ = "" }
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的结果是空白的,因为您没有向管道返回任何内容(您只是更改了一个或多个属性的值,但之后却没有输出它们)。

可能有一个更简单的解决方案,但我认为这可以达到你想要的效果:

$CSV = Import-Csv "result.log" -Delimiter "|" | Foreach-Object {
    $Output = New-Object -TypeName PSObject

    $_.PSObject.Properties | Foreach-Object {
        If ($_.Value -like '*---*') { $_.Value = '' }
        $Output | Add-Member -Name $_.Name -Value $_.Value -MemberType NoteProperty   
    }

    $Output
}

这会对CSV的每一行执行以下操作:

  • 创建一个新的空PowerShell对象
  • 遍历CSV的属性,消隐包含---然后使用Add-Member将这些属性添加到对象
  • 将新对象输出到标准管道

此结果转到$CSV变量,然后您可以通过Export-CSV将其作为CSV输出(或者您可以跳过将变量放入变量并在结尾使用Export-CSVForEach-Object)。