2016-04-29 4 views
2

Im пытается написать пакетный файл, который читает список из файла file.txt, затем проверяет fileC.txt, если совпадение существует, если совпадение не существует, пишите первую соответствующую строку только из fileB.txt к fileC.txtПакетный файл для печати первого совпадения findstr приводит только к текстовому файлу

fileA.txt например

aaa1 
aaaa 
aaaa4 
bbb 
ccc12 

fileB.txt например

aaa1 some text 
aaa1 blah bla 
aaa1 .r 
aaaa some info 
aaaa blah bla 
aaaa4 some name 
bbb some name to 
bbb more blah blah 
ccc12 another name 
ccc12 blah bla 

результате fileC.txt

aaa1 some text 
aaaa some info 
aaaa4 some name 
bbb some name to 
ccc12 another name 

Что Im пытается сделать

for /F %%i in (C:\filecopy\fileA.txt) do (
If exist (findstr /B /C:%%i fileC.txt) (
echo %%i exists) else (
findstr /B /C:%%i fileB.txt >> fileC.txt) 
) 

Но этот код разве правильно и я не уверен, как лучше справиться с этим

ответ

1

Решение состоит в том, чтобы хранить в fileC.txt только первый матч из Findstr результата, когда каждое слово в fileA.txt ищется в fileB.txt (точно, как вы указали в названии вопроса):

@echo off 
setlocal 

(for /F %%i in (fileA.txt) do (
    set "firstMatch=true" 
    for /F "delims=" %%j in ('findstr /B /C:%%i fileB.txt') do (
     if defined firstMatch (
     echo %%j 
     set "firstMatch=" 
    ) 
    ) 
)) > fileC.txt 
+0

ТКУ работайте так, как я этого хотел :) –