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

Windows batch脚本实现两CSV首列匹配 从大列数文件追加指定列

解决Windows批处理匹配CSV列追加内容问题

原代码存在的问题

  • 仅读取File1的前5列,无法完整保留File1所有原有字段
  • 嵌套循环效率极低,大文件场景下运行速度会非常慢
  • for /f 循环变量仅支持单字母命名,直接读取到第51个变量的写法繁琐容易出错
  • 未处理表头行,会导致输出表头缺失追加的5列表头

可行批处理方案

实现思路:先遍历File2,将第一列作为索引键,预存对应行的第47-51列内容到内存,再遍历File1逐行匹配追加,效率更高逻辑更清晰。

@echo off
setlocal enabledelayedexpansion

:: 此处修改为你的实际文件路径
set "file1=F:\testscript\employeenetchange\csv\test1.csv"
set "file2=F:\testscript\employeenetchange\csv\test2.csv"
set "output=F:\testscript\employeenetchange\csv\newfile3.csv"

:: 先清空输出文件
type nul > "%output%"

:: 第一步:遍历File2,预存第一列对应的第47-51列内容
for /f "skip=1 tokens=1,47-51 delims=," %%a in ('type "%file2%"') do (
    set "key=%%a"
    set "append_str=%%b,%%c,%%d,%%e,%%f"
    :: 把内容存入以key为名称的变量
    set "map_!key!=!append_str!"
)

:: 第二步:处理表头行单独追加File2的47-51列表头
set /p header2=<"%file2%"
set "header_append="
for /f "tokens=47-51 delims=," %%a in ("!header2!") do set "header_append=%%a,%%b,%%c,%%d,%%e"
set /p first_line=<"%file1%"
echo !first_line!,!header_append!>>"%output%"

:: 第三步:遍历File1逐行匹配追加内容
for /f "skip=1 delims=" %%a in ('type "%file1%"') do (
    set "line=%%a"
    :: 提取当前行第一列作为匹配键
    for /f "tokens=1 delims=," %%k in ("!line!") do (
        :: 匹配到则追加,未匹配到保留原行
        if defined map_%%k (
            echo !line!,!map_%%k!>>"%output%"
        ) else (
            echo !line!>>"%output%"
        )
    )
)

echo 处理完成,输出文件路径:%output%
pause

注意事项

  • 本方案仅适用于CSV字段内不包含逗号、引号的场景,如果你的CSV存在带逗号的引用字段,建议使用PowerShell或者Python处理更稳妥
  • 如果File2存在第一列重复的行,默认会以最后一次出现的行的47-51列内容为准
  • 文件路径如果包含空格,请确保全程用双引号包裹路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:24:03