Powershell:如何从 csv 标头的字符串中删除引号

Powershell: How to delete quotes from string for csv Header

提问人:Katy 提问时间:12/1/2020 更新时间:12/1/2020 访问量:299

问:

我想执行以下操作:

$content = $source | ConvertFrom-Csv -Header $HEADER

我的问题是变量$HEADER。我使用 Get-Content 来获取所需的内容。不幸的是,这会在对象周围添加引号,因此 -Header 将列列表视为一列并忽略逗号。

如果我回应$HEADER我会得到以下结果:"a","b","c"

但它被视为:'"a","b","c"'

如果我像这样覆盖$HEADER一切正常:$HEADER = "a","b","c"

不幸的是,我需要使用 Get-Content,因为我的标头需要是可变的。

我相信只会删除字符串中的字符,而不会删除周围的引号。-remove "'", ""

任何帮助都非常感谢:)

PowerShell CSV 报价

评论


答:

0赞 Dumbi 12/1/2020 #1
$header = '"a","b","c"';
$header = $header.Split(',');

$HEADER = "a","b","c"是一个数组,而是一个字符串。'"a","b","c"'

因此,您应该将其拆分以获得所需的输出。

0赞 Theo 12/1/2020 #2

Get-Content(不带开关)将文本文件读取为行数组,所以是的,那么标题(和所有剩余数据)不会分隔为字段。-Raw

Import-Csv将读取输入并将其解析为具有现有标头的属性名称的对象,或者您使用 Parameter 将其作为字符串数组提供给标头的对象-Header

Export-Csv将始终引用所有内容,无论是标头还是数据字段,除非你使用的是 PowerShell 版本 7 并添加到 cmdlet。-UseQuotes AsNeeded

简单地尝试删除 CSV 文件中的所有引号可能会使字段顺序错位,并使 csv 无法使用。有一种安全的方法可以做到这一点,请参阅我的函数 ConvertTo-CsvNoQuotes