保存为“正确的”csv /删除CSV的引号除了逗号的存在

我正在从SharePoint网站下载CSV。 它带有一个.csv文件扩展名。

当我通过在记事本中打开文件来检查文件的内容时,我看到的数据看起来像这样的示例行:

"TITLE",OFFICE CODE,="","CUSTOMER'S NAME",ACCOUNT

我希望数据看起来像这样:

TITLE,OFFICE CODE,,"CUSTOMER'S NAME",ACCOUNT

解决这个问题的一种方法是手动的。 当我在Excel中打开文件并将其保存(不会改变任何内容)时,它会提示我以下内容: fileOrig.csv may contain features that are not compatible with CSV (Comma delimited). Do you want to keep the workbook in this format? fileOrig.csv may contain features that are not compatible with CSV (Comma delimited). Do you want to keep the workbook in this format? 当我保存它,然后在记事本中检查它时,数据将根据我希望的样子进行格式化。

有没有一种快速的方法来保存与PowerShell的原始CSV?

如果没有快速的方法来使用PowerShell重新保存文件,我想使用PowerShell来parsing它。

这些是我想要介绍的parsing规则:

  • 从不包含字符的单元格中移除封装双引号
  • 删除= char

我试着编写一个testing脚本,看看可能包含的字符。 它应该find不包含字符的单元格,并删除封装文本的双引号。 这不起作用,因为我认为它在Import-Csv扔了双引号

 $source = 'I:\dir\fileOrig.csv' $dest = 'I:\dir\fileStaging.csv' $dest2 = 'I:\dir\fileFinal.csv' get-content $source | select -Skip 1 | set-content "$file-temp" move "$file-temp" $dest -Force $testcsv = Import-Csv $dest foreach($test in $testcsv) { #Write-Host $test."CUSTOMER NAME" if($test."CUSTOMER NAME" -NotLike "*,*") { $test."CUSTOMER NAME" -replace '"', '' } } $testcsv | Export-Csv -path $dest2 -Force 

有人可以帮助我执行上面的逻辑,或者如果你知道一个更好的方式来保存文件作为一个适当的CSV,你可以让我知道吗?

由于Excel可以处理这个问题,为什么不使用vb​​s脚本来自动化? 使用记事本创build“Fix.vbs”用以下行:

 Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open("C:\test\test.csv") objworkbook.Application.DisplayAlerts = False objworkbook.Save objexcel.quit 

从命令提示符运行它,它应该做的伎俩。

我看到已经有一个被认可的答案,我只是提供一个替代scheme。

如果你想保留在PowerShell中,你可以这样做:

 $File = 'I:\dir\fileOrig.csv' $dest = 'I:\dir\fileStaging.csv' $Output = 'I:\dir\fileFinal.csv' $CSV = Import-Csv $file $Members = $test|gm -MemberType Properties|select -ExpandProperty name $test|%{$row=$_;$Members|%{if(!($row.$_ -match "\w+")){$row.$_=$null}};$_=$row}|export-csv $dest -NoTypeInformation -Force gc $file|%{($_.split(",") -replace "^`"(.*)`"$","`$1") -join ","}|Out-File $Output 

导入CSV文件,确保在每个项目的每个属性中有单词(字母,数字和/或下划线…不要问我为什么下划线被认为是字,RegEx要求这样做!) CSV,然后再次运行该文件,只是在逗号分隔文本,如果它显示在双引号括起来,它们,重新连接线,然后输出到一个文件。 我不认为唯一的东西就像在OP中的“首选输出”一样显示,而不是"CUSTOMER'S NAME"您可以获得CUSTOMER'S NAME