将 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 文件与批处理文件合并,包括每行中的文件名的主要内容,如果未能解决你的问题,请参考以下文章
我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?