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



我有一个小批处理文件,该文件基于匹配值合并了两个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列数据,以及已将其与。

然后,我希望将输出CSV的第一列删除并替换为File1.csv。

的附加列2

我希望我已经足够解释了这一点,我想知道这是否可能。

任何帮助将不胜感激!

编辑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
   )
)

最新更新