返回

如何轻松合并多个 CSV 文件并为合并后的文件添加文件名字段?

windows

## 如何同时合并多个 CSV 文件,并将文件名添加为“文件名称”字段

### 问题

需要合并多个 CSV 文件(均采用相同格式)为一个文件,并将文件名添加为最后一个字段,字段名称为“文件名称”。由于所有 CSV 文件的字段名称相同,因此不应重复字段名称。目标是使用批处理脚本实现此目的。

### 解决方法

以下批处理脚本可用于合并多个 CSV 文件并添加文件名作为最后一个字段:

@echo off
setlocal enabledelayedexpansion

pushd C:\Users\Ak\Desktop\Test\New folder

set /p first=y
set newfile=Merge_CSV_HB_R5217476_REDReport.csv

for %%F in (*.csv) do (
    if not %%F==%newfile% (
        if not defined first (
            echo C1,C2,File Name>%newfile%
            set first=y
        )
        for /f "delims=" %%i in (%%F) do (
            set line=!line!,%%i
        )
        set line=!line!,%%~nF
    )
)

popd

### 脚本分析

  • pushdpopd 命令用于切换到包含 CSV 文件的目录。

  • 变量 first 用来标记是否需要写文件头。

  • newfile 变量指定合并后的文件名。

  • for 循环遍历当前目录中的所有 CSV 文件(但不包括合并后的文件)。

  • 如果当前文件不是合并后的文件,则将文件头(C1,C2,File Name)写入合并后的文件。

  • 使用嵌套 for 循环逐行读取当前文件,并将每行追加到合并后的文件中。

  • 最后,将当前文件的名称(%%~nF)追加到合并后的文件,作为“文件名称”字段。

### 优化

此脚本经过了以下优化:

  • 删除了不必要的 ECHO 命令。
  • 将两个 FOR 循环合并为一个。
  • 使用延迟扩展(enabledelayedexpansion)来提高效率。
  • 使用 popd 命令返回到原始目录。

### 注意

请确保所有 CSV 文件的字段名称相同,否则合并可能会出现问题。

### 常见问题解答

  1. 为什么需要合并多个 CSV 文件?

    • 合并多个 CSV 文件可以方便地将数据从多个来源汇总到一个文件中,以便进行分析、处理和报告。
  2. 如何确保 CSV 文件的格式相同?

    • 在合并之前,可以先使用脚本或工具检查 CSV 文件的格式,并确保它们具有相同的字段名称和数据类型。
  3. 合并后的文件在哪里找到?

    • 合并后的文件将保存在您指定 newfile 变量的目录中。
  4. 如何修改文件名字段的名称?

    • 可以在文件头部分修改 File Name 字段名称,使其与您的需要相匹配。
  5. 可以合并任意数量的 CSV 文件吗?

    • 理论上可以,但实际合并数量取决于脚本的处理能力和内存限制。