态
我有一个小批处理文件,该文件基于匹配值合并了两个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
)
)