使用批处理文件合并Vlookup样式csv

时间:2014-03-12 15:05:42

标签: batch-file csv

我有一个小的批处理文件,根据匹配的值合并两个csv文件。见下面的代码:

@ECHO OFF 
for /f "tokens=1 delims=, skip=1" %%i in (File2.csv) do @findstr  "%%i," File1.csv >nul & If     errorlevel 0 if not errorlevel 1 (for /f "tokens=1-4 delims=," %%m in ('findstr /i /L "%%i," File1.csv') do (@echo %%1,%%2,%%3,%%4>>output.csv 
echo %%i))

我的file2.csv包含4列数据,而我的file1.csv包含2列数据。两者上的第1列是我想要匹配的唯一值(它是包含扩展名的文件名)。

我希望我的输出csv包含来自File2.csv的所有4列数据,以及已经匹配的File1.csv的第2列。

然后我想删除输出csv的第一列,并用File1.csv中的这个附加列2替换。

我希望我已经解释得这么好了,我想知道这是否可行。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

编辑代码已修改为对评论的回复

编辑2 删除了File1.csv中的引号

下面的批处理文件假设如下:

<强> File1.csv:

"file name.ext","col1-2"

<强> File2.csv:

file name.ext,col2-2,col2-3,col2-4

<强> Output.csv:

col1-2,col2-2,col2-3,col2-4

@echo off
setlocal EnableDelayedExpansion

rem Load File1 as lookup table:
for /F "tokens=1,2 delims=," %%a in (File1.csv) do (
   set "filename=%%~a"
   set "col1_2[!filename: =_!]=%%~b"
)

rem Process File2:
for /F "tokens=1* delims=," %%a in (File2.csv) do (
   set "filename=%%a"
   for /F %%f in ("!filename: =_!") do if defined col1_2[%%f] (
      echo !col1_2[%%f]!,%%b
   ) else (
      echo NoMatchingFilename,%%b
   )
)