You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个CSV文件按列合并?Windows命令行copy结果不符需求

如何在Windows下将多个CSV文件按列合并

我有15个CSV文件需要合并为一个文件,每个CSV文件对应合并后文件的一列。尝试用Windows命令行的copy *.csv combined.csv命令合并,结果却是把所有内容堆叠到单一列里,不符合预期。

原始文件示例

D1.csv   D2.csv   D3.csv
11       21       31
12       22       32
13       23       33

执行copy *.csv combined.csv后的结果

11
12
13
21
22
23
31
32
33

期望结果

11 21 31
12 22 32
13 23 33

解决方案:用PowerShell实现列合并

Windows的copy命令只是简单拼接文件内容,没法实现按列合并,你可以用PowerShell脚本完成这个需求:

方法1:适用于无表头、行数相同的CSV文件

打开PowerShell,切换到CSV文件所在目录,执行以下命令:

# 获取所有CSV文件
$csvList = Get-ChildItem -Filter *.csv
# 读取所有文件内容
$allContent = $csvList | ForEach-Object { Get-Content $_.FullName }
# 计算每个文件的行数
$rowCount = $allContent.Count / $csvList.Count
# 逐行拼接各文件对应行的内容
for ($i = 0; $i -lt $rowCount; $i++) {
    $currentLine = @()
    foreach ($file in $csvList) {
        # 取当前文件的第i行内容
        $currentLine += $allContent[$i + $csvList.IndexOf($file)*$rowCount]
    }
    # 用空格分隔列,追加到合并文件
    $currentLine -join ' ' | Out-File -Append combined.csv
}

方法2:支持带表头的CSV文件(可自定义分隔符)

如果你的CSV文件有表头,或者需要用逗号作为分隔符,可以用这个脚本:

$csvFiles = Get-ChildItem -Filter *.csv
$combinedRows = @()

# 获取第一个文件的行数,确保所有文件行数一致
$firstFileRows = Import-Csv $csvFiles[0].FullName
$totalRows = $firstFileRows.Count

for ($rowIndex = 0; $rowIndex -lt $totalRows; $rowIndex++) {
    $newRow = [ordered]@{}
    foreach ($file in $csvFiles) {
        # 读取当前文件的所有行
        $fileRows = Import-Csv $file.FullName
        # 取当前行的内容,用文件名作为表头(可自定义)
        $newRow[$file.BaseName] = $fileRows[$rowIndex].PSObject.Properties.Value[0]
    }
    $combinedRows += [PSCustomObject]$newRow
}

# 导出合并后的文件,这里用空格作为分隔符,可改成','
$combinedRows | Export-Csv -Path 'combined.csv' -NoTypeInformation -Delimiter ' '

内容的提问来源于stack exchange,提问作者user19428866

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:40:22