使用 Powershell 在不删除现有数据的情况下写出两 header 行

Using Powershell to write out two header rows without deleting existing data

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

我一直在测试一个 powershell 脚本来执行此操作,我可以写一行 headers,但很难写两行。

下面是我目前正在尝试构建的 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

考虑到您只是想在 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

这看起来就是你想要的。

Import-Csv-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

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