1

我需要为现有的 csv 文件生成两个标题行,因为将上传 csv 的系统需要两个标题行。csv 文件将包含我想要保留的数据。

我一直在测试一个powershell脚本来做到这一点,我可以写一行标题,但我很难写两行。

下面是我目前正在尝试构建的 powershell 脚本。

$file = "C:\Users\_svcamerarcgis\Desktop\Test.csv"
$filedata = import-csv $file -Header WorkorderETL 'n ICFAORNonICFA, WONUmber, Origin
$filedata | export-csv $file -NoTypeInformation

我正在寻找的最终结果应该如下:

WorkorderETL
ICFAORNonICFA, WONUmber, Origin
xxx,yyy,zzz
4

2 回答 2

1

考虑到您只是想在 CSV 的顶部添加一行,您可能最好尝试将其作为文本文件处理:

$file = "C:\Users\User\OneDrive\Scripts\StackTesting\Test.csv"
$CSV = "c1r1, c2r1, c3r1 `nc1r2, c2r2, c3r2" 

$filedata = Get-Content $file 

$filedata = "WorkorderETL`n" + $CSV

$filedata | Out-File $file

这将导致 CSV 文件保存:

WorkorderETL
c1r1, c2r1, c3r1 
c1r2, c2r2, c3r2

这看起来是你想要的。

于 2020-01-24T00:37:26.060 回答
1

Import-Csv's参数的唯一目的-Header是提供一个列名数组,以用作将 CSV 行解析为的自定义对象的属性名称 - 您不能将其重新用于特殊输出格式以供以后导出。

您可以改用以下方法,绕过对Import-CsvExport-Csv完全 (PSv5+) 的需要:

$file = 'C:\Users\User\OneDrive\Scripts\StackTesting\Test.csv'

# Prepend the 2-line header to the existing file content
# and save it back to the same file
# Adjust the encoding as needed.
@'
WorkorderETL
ICFAORNonICFA,WONUmber,Origin

'@ + (Get-Content -Raw $file) | Set-Content $file -NoNewline -Encoding utf8

为了安全起见,请务必先创建原始文件的备份。由于文件在同一管道中被读取(完整)和重写,如果写回输入文件被中断,则假设数据丢失的可能性。

于 2020-01-24T03:51:36.997 回答