2016-04-29 21 views
2

Ich versuche, eine Batch-Datei zu schreiben, die eine Liste von fileA.txt liest dann überprüft fileC.txt, wenn Übereinstimmung existiert, wenn keine Übereinstimmung vorhanden ist schreibe zuerst übereinstimmende Zeile nur von fileB.txt zu fileC.txtBatch-Datei zum ersten Treffer von findstr-Ergebnissen nur in Textdatei

DateiA.txt Beispiel

aaa1 
aaaa 
aaaa4 
bbb 
ccc12 

fileB.txt Beispiel

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 

resultierende fileC.txt

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

Was Im Versuch

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

Aber dieser Code ist nicht korrekt und im nicht sicher, wie man am besten zu tun, es ist

Antwort

1

Die Lösung zu handhaben speichern in fileC.txt nur das erste Spiel von findstr Ergebnis, wenn jedes Wort in DateiA.txt in fileB.txt gesucht wird (genau wie Sie in der Frage Titel angegeben):

@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

Tku arbeite genau so, wie ich es wollte :) –