将带有逗号的属性保存为CSV



我正在powershell中创建一个CSV文件。

现在我的代码是:

Add-content -Path $filePath -Value "$($variable.Property)"

这在大多数情况下都很好,除非属性包含逗号,即";测试、组织";。当我打开CSV时,逗号会与它一起使用(这就是我想要的(,导致额外的分隔。如何保存";测试、组织;到一列?

参考导出CSV的文档,您需要使用不同的分隔符,如分号。

读取CSV时,还应指定分隔符:导入CSV。

尝试引用您的属性:

Add-content -Path $filePath -Value "'$($variable.Property)'"

或者使用一个内置的CSV命令,它会自动引用所有值:

$foo.Bar | Export-Csv -Path $filePath
$foo.Bar| ConvertTo-Csv | Out-File -Path $filePath

如果你只是想避免逗号的问题,你可以更改字段之间的分隔符:

$foo | Export-Csv -Path $filePath -Delimiter '|'

这是一篇关于如何使用out file或添加成员的文章,该行的某些单元格的变量值中有逗号,而有些单元格没有。

https://imjustanengineer.blogspot.com/2022/01/so-youre-trying-to-use-powershell-out.html

这是一个代码片段,链接中有一个更详细的解释和完整的工作函数$outputArr是要写入csv的所有csv数据行的数组。循环检查每一行,看它是否在各个单元格条目中包含逗号,如果包含逗号,则在该条目周围加引号。如果没有,则不需要进行任何调整,然后添加一个新的数组。

$index = 0;
foreach ($outputTemp in $outputArr)
{
if ($outputTemp.ToString().Contains(","))
{
$output += "`"$outputTemp`",";
}
else
{
$output += $outputTemp + ",";
}
$index++;

if ($index -eq $outputArr.Count)
{
if ($output.EndsWith(","))
{
$output = $output.Remove($output.Length - 1);
}
}
}

在Excel中打开一个csv文件并在一列中添加文本和逗号后,我发现了一个简单得可怕的答案。当我保存、关闭和重新打开时,该列仍然具有正确格式的所有单词和逗号。所以,然后我在记事本++中打开了文件,这就是我发现的:

column1text, column2text,"column3,text,with,commas"

如果它不清楚,而且我花了相当多的时间才认识到造成所有差异的小细节,那么开头的双引号在前面的逗号后面不能有空格。

column1text, column2text, "column3,text,with,commas" 

将所有单词拆分为单独的列,因为之间有一个空格

column2text, "column3,etc"

把的空间拿走

column2text,"column3,etc" 

双引号内的所有内容都保留在一列中。

使用active directory distinguishedName的示例,例如CN=somename,OU=Domain Controllers,DC=foo,DC=bar

$computers = get-adcomputer -filter *
foreach ($computer in $computers) {
$deviceName = $computer.Name
$dn = '"' + $computer.DistinguishedName + '"'
$guid = $computer.objectGUID
$lastLogon = $computer.LastLogonDate
$serialNumber = $computer.serialNumber
$whenCreated = $computer.whenCreated
"$guid, $lastLogon, $deviceName, $serialNumber, $whenCreated,$dn" | add-content "c:tempfilename.csv"
}

如果在$whenCreated和$dn之间添加一个空格,它就不起作用了,就像这样:

"$guid, $lastLogon, $deviceName, $serialNumber, $whenCreated, $dn" | add-content "c:tempfilename.csv"

这花了一个下午的时间,所以我希望这能为某人节省一些时间和沮丧。

最新更新