使用 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-Csv
和 Export-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
为了安全起见,请务必先创建原始文件的备份。
由于正在同一管道中读取(完整)和重写文件,因此如果写回输入文件被中断,则假设有可能会丢失数据。
我需要为现有的 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-Csv
和 Export-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
为了安全起见,请务必先创建原始文件的备份。 由于正在同一管道中读取(完整)和重写文件,因此如果写回输入文件被中断,则假设有可能会丢失数据。