В описании проблемы не хватает нескольких деталей, и приведенный пример кода не имеет отношения к описанию. В описании вы говорите о двух файлах , но в коде вы обрабатываете «все файлы CVS» без указания того, какие «два файла» следует объединить. Код имеет неописанное значение «Ключевое слово». Код сортирует выходной файл, но в этом нет необходимости, потому что «оба входных файла отсортированы по общему столбцу», как вы сказали ...
В любом случае, я пытался помочь вам написать рабочий код, который достиг бы того, что вы сказали в описании проблемы. Я искал «объединение файлов» в теге Batch-file и получил несколько результатов, поэтому я просто использовал этот метод в качестве базового ...
@echo off
setlocal EnableDelayedExpansion
set "Header1="
set "Header2="
set "common2=-999999999"
rem Read second file from redirected input
< file2.csv (
rem Read first file via FOR /F
for /F "tokens=1,2 delims=," %%a in (file1.csv) do (
if not defined Header1 (
set "Header1=%%a,%%b"
) else (
if !common2! lss %%a call :ReadNextFile2RecordUntil %%a
if !common2! equ %%a echo %%a,%%b,!rest2!
)
)
) > result.csv
goto :EOF
:ReadNextFile2RecordUntil commonCol
set "line2="
set /P "line2="
if not defined line2 set "common2=999999999" & exit /B
for /F "tokens=1* delims=," %%A in ("%line2%") do (
if not defined Header2 (
set "Header2=%%B"
echo %Header1%,%%B
goto ReadNextFile2RecordUntil %1
) else (
set "common2=%%A"
set "rest2=%%B"
)
)
if !common2! lss %1 goto ReadNextFile2RecordUntil %1
exit /B
file1:
id,name,roll
1,x,12
2,y,13
4,z,record1 with no matching record2
5,t,15
file2.csv:
id,class,subject
1,V,english
2,III,Math
3,IV,record2 with no matching record1
5,V,OK
result.csv:
id,name,class,subject
1,x,V,english
2,y,III,Math
5,t,V,OK