我需要先将一个标头添加到一个csv文件中,然后再将其导入数据库。由于某些原因,添加了标头,但其余csv数据未添加在换行符上,而是紧随其后。
$file = Get-ChildItem \\some path to the datafile\IDM_dump | sort LastWriteTime | select -last 1
Copy-Item $file.FullName "D:\Program Files (x86)\Indocs\DatabaseImport\IDMdump.csv"
#Make copy of header info file because file will be renamed
Copy-Item 'D:\Program Files (x86)\Indocs\DatabaseImport\IDMheaderinfo.csv' 'D:\Program Files (x86)\Indocs\DatabaseImport\headerinfo.csv'
#Add header data at the first line of the data file
$valueDumpFile = Get-Content "D:\Program Files (x86)\Indocs\DatabaseImport\IDMdump.csv"
#Add-Content -Path 'D:\Program Files (x86)\Indocs\DatabaseImport\headerinfo.csv' -Value $valueDumpFile
Out-File -FilePath 'D:\Program Files (x86)\Indocs\DatabaseImport\headerinfo.csv' -InputObject $valueDumpFile -Append -NoClobber
#Rename file to new name
Rename-Item -Path 'D:\Program Files (x86)\Indocs\DatabaseImport\headerinfo.csv' -NewName IDMDumpWithHeader.csv
答案 0 :(得分:1)
由于您不在Powershell中使用数据,因此我只将csv文件视为纯文本,然后使用Get-Content
来加入文件:
Get-Content $file1,$file2 | Set-Content $output_file
您指定文件的顺序就是它们的加入顺序。
您不需要文件的任何副本或重命名,只需将文件加入并输出一次到所需的名称文件即可:
$headers = 'D:\Program Files (x86)\Indocs\DatabaseImport\IDMheaderinfo.csv'
$output = 'D:\Program Files (x86)\Indocs\DatabaseImport\IDMDumpWithHeader.csv'
$file = Get-ChildItem \\server\IDM_dump | sort LastWriteTime | select -last 1
Get-Content $headers,$file.fullname | Set-Content $output
答案 1 :(得分:1)
如果您仍然想使用Get-Content
,请检查@James C.的answer。在此答案中,我建议使用另一种方法,如果您需要修改脚本中的数据,而不仅仅是加入文件,则可能会更有用。
使用与CSV相关的cmdlet会更容易吗?
$object = Import-CSV .\data.csv -Header ((Get-Content .\headers.csv) -split ",")
假设文件内容如下:
firstname,lastname,id
john,doe,2
john,smith,1
结果将是对象:
PS C:\SO\51650194> $object = Import-CSV .\data.csv -Header ((Get-Content .\headers.csv) -split ",")
PS C:\SO\51650194> $object
firstname lastname id
--------- -------- --
john doe 2
john smith 1
然后您可以使用.csv
轻松将其导出到Export-CSV
。