批量合并CSV跳过前2行的批处理脚本运行中途停止问题
问题原因
脚本中使用的more +2命令存在内置硬限制:Windows自带的more.com是从MS-DOS时代沿用的分页显示工具,单次调用的最大输出行数为65534行,超出该行数后命令会无提示自动终止输出。
你的单个CSV文件就包含253612行数据,远超过这个上限,因此脚本在处理第一个CSV文件到65534行时就直接中断,既没有读完第一个文件的剩余内容,也不会处理后续11个CSV文件,最终只生成了6MB的不完整输出文件。
解决方法
以下两种方案都不存在行数限制,可以正常完成全量CSV合并需求,按需选择即可:
- 纯批处理无依赖方案
用for /f循环自带的skip参数实现跳过前2行的逻辑,完全规避more命令的行数限制,适配所有Windows版本:
注意:如果CSV内容包含@echo off :: 清空已存在的旧输出文件 type nul > output.csv for %%f in (*.csv) do ( :: skip=2指定跳过前2行,delims、eol参数配置保证不拆分行内容、不忽略特殊字符开头的行 for /f "usebackq skip=2 delims= eol=" %%line in ("%%f") do ( echo %%line>>output.csv ) ) echo Done.!字符,运行该脚本前不要开启延迟变量扩展,避免内容被转义丢失。 - PowerShell内置命令方案(大文件处理速度更快)
该方案不需要通过批处理变量逐行解析内容,处理大文件的速度远高于纯批处理,也不存在特殊字符转义问题,适配Win7及以上系统:@echo off :: 如果你的CSV是GBK编码,把下面参数里的UTF8替换为Default即可 powershell -Command "$outFile='output.csv'; Get-ChildItem -Filter *.csv | ForEach-Object { Get-Content $_.FullName | Select-Object -Skip 2 | Add-Content $outFile -Encoding UTF8 }" echo Done.
内容的提问来源于stack exchange,提问作者Vianey
相关产品推荐
相关产品推荐

