请求编写Batch脚本合并CSV文件中匹配的重复记录
Windows批处理脚本合并CSV重复记录
针对你的需求——合并CSV中前三字段完全相同的记录,将对应第四字段数值用引号包裹合并——以下是可直接运行的批处理脚本,完全基于你提到的for /f命令实现:
完整脚本
@echo off setlocal enabledelayedexpansion :: 清空历史临时变量,避免残留影响 for /f "delims==" %%i in ('set key_ 2^>nul') do set "%%i=" :: 读取源CSV文件,替换成你的实际文件名 for /f "tokens=1-4 delims=, eol=" %%a in (input.csv) do ( :: 用前三字段拼接唯一标识键 set "key=%%a,%%b,%%c" :: 初始化或追加第四字段数值 if not defined key_!key! ( set "key_!key!=%%d" ) else ( set "key_!key!=!key_!key!,%%d" ) ) :: 输出处理结果到新CSV文件,替换成你的目标文件名 > output.csv ( for /f "tokens=1,* delims==" %%i in ('set key_') do ( set "record=%%i" :: 去掉临时变量的前缀,还原前三字段 set "record=!record:key_=!" echo !record!,"!j!" ) ) endlocal echo 处理完成,结果已保存到output.csv
使用说明
- 把脚本中的
input.csv替换为你的源CSV文件名,output.csv替换为你要保存结果的文件名 - 保存脚本为
merge_csv.bat,和源CSV放在同一文件夹 - 双击运行脚本即可
关键逻辑解释
setlocal enabledelayedexpansion:开启延迟变量扩展,让循环中能实时读取和修改变量值- 第一个
for /f循环:清空之前运行脚本产生的临时变量,避免干扰本次处理 - 第二个
for /f循环:逐行读取CSV,按逗号分割为4个变量,用前三字段拼接成唯一键,将第四字段数值存入对应变量(不存在则初始化,存在则追加) - 第三个
for /f循环:遍历所有存储的合并结果,按要求格式输出到新文件
注意事项
- 确保源CSV的字段1、2、3不包含逗号,否则会导致分割错误(如果需要处理带逗号的字段,需额外逻辑处理引号包裹的字段,你的示例中未涉及此情况)
- 脚本会跳过空行,若需要保留空行需额外调整
内容的提问来源于stack exchange,提问作者VoodooMcGobo
相关产品推荐
相关产品推荐

