我的老蝙蝠档案 复制F:\ File.hdr + F:*。csv F:\ FinalOutput.csv
HDR文件是单个条目文件,只有CSV文件的标题数据
有没有办法在PowerShell中执行此操作(将所有CSV文件合并为一个文件)?
这是我的powershell脚本,它不起作用
$CSVFolder = 'F:\Input\';
$OutputFile = 'F:\Output\NewOutput.csv';
$CSV= @();
Get-ChildItem -Path $CSVFolder -Filter *.inv | ForEach-Object {
$CSV += @(Import-Csv -Path $CSVFolder\$_)
}
$CSVHeader = Import-Csv 'F:\Input\Headings.hdr'
$CSV = $CSVHeader + $CSV
$CSV | Export-Csv -Path $OutputFile -NoTypeInformation -Force;
我获取了导出的FileNames列表,而不是Files的内容。 该脚本还修改了INV文件的日期/时间戳。它不应该这样做。
答案 0 :(得分:3)
如果您只是像以前一样附加文件,则可以跳过整个CSV位。
这样的事情应该有效:
# First we create the new file and add the header.
get-content $headerfile | set-content $outputfile
# Then we get the input files, read them out with get-content
# and append them to the output file (add-content).
get-childitem -path $csvfolder *.inv | get-content | add-content $outputfile
如果您想在脚本中处理CSV数据,CSV命令行开关很方便,但在您的情况下,只需附加文件即可。由于Powershell不必解析CSV行并创建PS对象,所以不会对CSV转换造成太大的打扰。但是纯文本真的很快。
此处的另一个技巧是如何在管道中使用get-content和add-content。由于他们知道管道,您可以传入文件对象而无需使用foreach循环。这使你的陈述更短。
答案 1 :(得分:1)
怎么样:
get-childitem *.inv | foreach-object {
import-csv $_ -header (get-content Headings.hdr)
} | export-csv NewOutput.csv -notypeinformation