我有一个小的批处理文件,根据匹配的值合并两个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替换。
我希望我已经解释得这么好了,我想知道这是否可行。
非常感谢任何帮助!
答案 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
)
)