【问题标题】:Batch file to concatenate multiple csv files into a single csv with the one header将多个 csv 文件连接成一个带有一个标题的单个 csv 的批处理文件
【发布时间】:2022-11-04 16:10:18
【问题描述】:

我需要将多个 .csv 合并为一个,每个 .csv 文件都有如下标题(2 行);

Row#1 SWG   SWG report  RequestReport   1.1 2022-10-30T20:00:00Z to 2022-10-31T20:00:00Z                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
Row#2 RequestID RequestDate ID  LocalizedRequestDate    ApplicationName OverallRcode
@echo off
    setlocal enableextensions disabledelayedexpansion

    rem configure paths
    set "source=E:\Guest\*.csv"
    set "target=E:\Guest\SWG\Report_%date:~4,2%-%date:~7,2%-%date:~-4%.csv

    >"%target%" (
        for %%a in ("%source%") do (
            set "headerRow="
            <"%%~fa" (
                for /l %%h in (1 1 10) do if not defined headerRow set /p "headerRow="
                findstr "^"
            )
        )
    )

我只需要在目标文件中保留 1 个标题(第 2 行)和来自 .csv 文件的数据。

上面的代码正在合并文件,还删除了每个文件的第一个标头,但包含每个 .csv 文件的第二个标头,我该如何消除它?

【问题讨论】:

  • 所以你似乎有一个 TSV,(制表符分隔值), 文件;那是对的吗?您能否还解释一下为什么这两个“标题”记录中的每一个都有很多空字段?
  • @Compo,是的,它是 TSV,文件中没有空字段。

标签: batch-file


【解决方案1】:
@echo off
setlocal enableextensions disabledelayedexpansion

rem configure paths
set "source=E:Guest*.csv"
set "target=E:GuestSWGReport_%date:~4,2%-%date:~7,2%-%date:~-4%.csv
set "file1="

>"%target%" (
for %%b in ("%source%") do (
 if defined file1 (
  for /f "usebackqskip=2delims=" %%e in ("%%b") do echo %%e
 ) else (
  for /f "usebackqskip=1delims=" %%e in ("%%b") do echo %%e
 )
 set "file1=N"
)
)

使用file1 作为标志;将其强制为未定义,跳过第一个文件的第一行,将其设置为已定义,跳过其余文件的前两行。

【讨论】:

  • 使用上面没有生成输出,我想跳过第一个文件的第一行,跳过其余文件的前两行。
  • 最后缺少) - 现在添加
猜你喜欢
  • 2021-11-15
  • 2021-08-17
  • 2012-12-08
  • 2017-12-01
  • 2015-08-08
  • 2022-01-19
  • 1970-01-01
  • 2019-08-25
  • 2015-10-29
相关资源
最近更新 更多