我想将多个具有3列和100行的.csv文件导入到一个.csv文件中,每次导入都进入接下来的3列(ABC-DEF-GHI)中,而不是全部并入前3列中有数千行。
我尝试过Import-Csv
,但是无法控制输出的放置位置。我将不得不使用COM对象(New-Object -ComObject excel.Application
)还是有一种更清洁的方法来控制导入的单元格?
标题行是
PSComputerName,HotfixID,InstalledOn
但是我需要让每个循环都可以遍历而不是在下面。
PSComputerName,HotfixID,InstalledOn,PSComputerName,HotfixID,InstalledOn,PSComputerName,HotfixID,InstalledOn
答案 0 :(得分:0)
您所描述的不是CSV的典型用例,Import-Csv
(或Export-Csv
)根本无法处理。两个cmdlet都将CSV的行转换为具有以列标题命名的属性的对象,反之亦然。因此,如果要使用*-Csv
cmdlet,则列标题必须唯一。
最简单的方法可能是这样的:
# read CSV data into distinct variables
$csv1 = Get-Content 'C:\path\to\1.csv'
$csv2 = Get-Content 'C:\path\to\2.csv'
$csv3 = Get-Content 'C:\path\to\3.csv'
# determine maximum number of rows
$max = $csv1.Count, $csv2.Count, $csv3.Count |
Sort-Object
Select-Object -Last 1
# concatenate corresponding rows from each file and write them to the output file
for ($i=0; $i -lt $csv1.Count; $i++) {
# emulate missing rows in case the CSVs don't have the same number of rows
$row1 = if ($csv1[$i]) {$csv1[$i]} else {',,'}
$row2 = if ($csv2[$i]) {$csv2[$i]} else {',,'}
$row3 = if ($csv3[$i]) {$csv3[$i]} else {',,'}
"${row1},${row2},${row3}" | Add-Content 'C:\path\to\output.csv'
}