【问题标题】:Powershell ExportCSV exports an empty file when the imported file comes from Import-csv当导入的文件来自 Import-csv 时,Powershell ExportCSV 导出一个空文件
【发布时间】:2020-01-17 14:09:21
【问题描述】:

我有一个 CSV 文件,我需要将分隔符从逗号更改为分号。 我用以下命令解决了这个问题

(Import-CSV $File) | Export-Csv $File -delimiter ';' -notypeinformation

但是当导入的 CSV 文件只包含我假设正在作为标题处理的一行时。它会删除输出文件中的这一行,并变成一个空文件。 但是,当我有不止一行并且 csv 包含标题和一些数据时,导出的文件正在使用标题和数据正确执行。

我用来在脚本开头设置头文件的代码

#set csv headers
Set-Content -Path "$FolderNameCiTypeDelta" -Value "name,type,location,size"

我已经尝试添加代码

  (Import-CSV $File -Header "name,type,location,size") | Export-Csv $File -delimiter ';' -notypeinformation 

但这只是用我指定的标题多出了一行。

[编辑]

我测试的 2 个 csv 文件包含以下几行

用 import 变成空的文件 --> export 命令包含

name,type,location,size

使用 import --> export 命令执行我需要的文件包含

name,type,location,size
test,extra,line

【问题讨论】:

  • 请添加一个无法按预期工作的文件的净化样本。
  • @Lee_Dailey 我添加了我用作输入的 csv 文件样本
  • 感谢您添加的信息! [grin] 看起来AdminOfThings 已经为您的问题发布了一个可行的解决方案……所以我会继续潜伏。

标签: powershell csv


【解决方案1】:

您可以执行以下操作:

$file = 't.txt'
$contents = Get-Content $file -totalcount 2
if ($contents.Count -gt 1) {
    (Import-Csv $file) | Export-Csv $file -Delimiter ';' -NoType
}
if ($contents.Count -eq 1) {
    $contents -replace ',',';' | Set-Content $file
}

这里的想法是读取文件的两行。如果它只包含一行,它将使用-replace 来修复您的分隔符。如果它有两行以上,它将使用*-Csv 命令。

-replace 部分仅在您的字段值中没有逗号时才有效。如果您的字段中确实有逗号,那么您应该在字段周围使用文本限定符(最有可能是双引号)。在这种情况下,您可以简单地使用-replace '","','";"'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2018-05-07
    • 2016-01-03
    • 2018-12-08
    相关资源
    最近更新 更多