将 CSV 文件与批处理文件合并,包括每行中的文件名

Posted

技术标签:

【中文标题】将 CSV 文件与批处理文件合并,包括每行中的文件名【英文标题】:Merging CSV files with batch file including filename in each line 【发布时间】:2013-11-17 11:34:24 【问题描述】:

搜索上一个问题找不到任何匹配的问题。

我需要一个批处理文件,它将与通配符匹配的文件夹中的所有 CSV 文件合并到一个新的合并 CSV 文件中,并且在每个合并的行中,它会在每个传输的字符串的末尾添加原始文件名。我尝试了这个不起作用的命令:

for /F "tokens=1* delims=" %%i in (^"SO_*.csv^") do @echo %%i,%%~ni >> MERGED.csv

它不拾取行,它只是拾取“SO_*.csv”以及第一个实际文件的文件名,将它们放入 MERGED.csv 并停止。

我哪里出错了?

提前致谢。

【问题讨论】:

为什么是这些胡萝卜?要处理文件中的行,您需要使用:for /F "usebackq" %%i in ("SO_*.csv") ..for /F %%i in (SO_*.csv) .. 【参考方案1】:
@echo off
    break > merged.csv
    for %%f in (so_*.csv) do for /F "tokens=*" %%g in ('type "%%f"') do echo %%g,%%f >> merged.csv

或者为了更快的方法

@echo off

    break > merged.csv
    for /F "tokens=1,* delims=:" %%f in ('findstr /R "." so_*.csv') do echo %%g,%%f >> merged.csv

【讨论】:

魅力十足!谢谢,我只是想了解逻辑,据我了解,您将其分为两个周期,一个周期分别用于每个文件,其中一个周期用于文件中的每个字符串? 你是对的。由于您需要在每一行中包含文件名,因此需要处理每一行。这需要为每个文件完成。在完整的文件掩码上使用 findstr 有一种更快的方法,但此解决方案与您正在尝试的类似。无论如何,将用它更新答案。 >> merged.csv echo %%g,%%f @foxidrive,或从 `echo %%g,%%f>>merged.csv 行中删除空格 当变量末尾有数字时,这是一个问题。尝试以这种方式将 1 或 2 回显到文件中。

以上是关于将 CSV 文件与批处理文件合并,包括每行中的文件名的主要内容,如果未能解决你的问题,请参考以下文章

使用 PowerShell 将多个 CSV 文件合并为一个

通过批处理合并 csv 文件

使用批处理文件并排合并csv文件[重复]

我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?

Ruby 在处理大文件时搜索和合并 CSV 文件

处理CSV文件