Batch zu finden string (enthalten in textlist.txt) in anderen .txt-Dateien im Verzeichnis und kopieren Sie den Wert aus .txt, um neue
habe ein problem mit der Suche nach einem batch zu finden, und kopiere Zeichenfolgen, die aufgeführt sind in textlist.txt von text-Dateien. Ist es möglich batch-Hexe finden sollte, alle Werte (aus textlist) in text-Dateien im Verzeichnis und kopieren Sie alle diese Werte auf neue Datei.
Ich habe ein Verzeichnis mit:
textlist.txt enthält:
- 3010
- 3020
- 3030
....
und andere Verzeichnis mit txt-Dateien:
3010.txt enthält eine tabulatorgetrennte zum Beispiel:
- 3010 a1
- 3011-b1 -
- 3012 c1
....
3020.txt enthält zum Beispiel:
- 3020 a4
- 3021 b3
- 3022 g5
....
3030.txt enthält zum Beispiel:
- 3030 h5 g7
- 3031 f2
- 3032 t4
....
und andere 3040.txt, 3050.txt etc.
Ich muss eine txt-Datei, wie dieses.
- 3010 a1 { dieser string becams aus 3010.txt aber ist möglich, dass es auch in anderen txt-Datei.}
- 3020 a4 { dieser string becams aus 3010.txt aber ist möglich, dass es auch in anderen txt-Datei.}
- 3030 h5 g7 { dieser string becams aus 3010.txt aber ist möglich, dass es auch in anderen txt-Datei.}
Danke für die Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende erzeugt eine Datei mit den übereinstimmungen über alle Dateien, die für alle input-Zeilen:
Funktioniert es so:
FIND
nimmt eine Zeile eingeben, durchsucht die angegebenen Dateien und druckt die Ergebnisse, die anFINDSTR
.FINDSTR
entfernt das "Rauschen", erzeugt durchFIND
(leere Zeilen und Zeilen wie------ filename.txt
) und druckt den rest.Dem Analyseergebnis ist gedruckt auf der standard-Ausgabe, die umgeleitet
results.txt
für die gesamte Schleife.Wenn, wie pro Ihren Kommentar, benötigen Sie zusätzlich zum erstellen einer Datei mit den Zeilen, hatte keine Streichhölzer, Sie ändern könnte, das obige Skript wie dieses:
Die Logik ist meist die gleiche, außer wenn
FIND
bekommt keine Spiele für die Eingabezeile. In diesem Fall wird der Suchbegriff ist gedruckt auf der standard-Fehler (ECHO … 1>&2
). Die standard-Ausgabe vonFIND
noch bekommt anFINDSTR
und, wie es enthält nur Lärm in diesem FallFINDSTR
nichts produziert.So, die Schleife liefert Ergebnisse sowohl auf die standard-Ausgabe und standard-Fehler, jedes mal, je nach dem Ergebnis der
FIND
. Die Standardausgabe wird umgeleitetresults.txt
, wie in der vorherigen version und der standard-Fehler ist weitergeleitetnotinfile.txt
.UPDATE
Das zweite Skript hat einen kleinen Fehler, die kann oder kann nicht ernst sein in Ihrer situation, je nachdem, wie Sie gehen zu verwenden, die
notinfile.txt
- Datei. Der Fehler besteht in einem extra-Raum wird Hinzugefügt, um das Ende von jedem Wert, gehtnotinfile.txt
.Ob es ein bug ist oder ein Artefakt der einige Sortieren, ich weiß nicht, aber ich fand heraus, dass, wenn ich speichern die Ergebnisse
FIND
in eine temporäre Datei und später laden Sie Sie von es inFINDSTR
keine extra-Raum produziert wird. Ich konnte nicht finden einen anderen Weg, das zu beheben wird der zusätzliche Speicherplatz-Problem, also hier die geänderte version:UPDATE 2 (folgenden zusätzlichen Kommentare)
Da die Werte in den Dateien sind das das tab-Trennzeichen ist, können Sie die Trennzeichen in der such-Zeichenfolge, nach der gesucht Begriff, um zu verhindern, dass passende
aaa
mit z.B.aaa/bbb
. Also anstatthätten Sie
wo der weite Raum, der nach
%%i
ist das tab-Zeichen.Und ich möchte auch vorschlagen, eine alternative version der
FINDSTR
Befehl. Sie sind auf der Suche nach nur einem Begriff, können Sie dies ändern:einfach diese:
08_5.0013.24
(nur der gesuchte Wert) oder wird es somehing wie08_5.0013.24 qwerty
(d.h. der gesuchte Wert, dann ein Leerzeichen, dann etwas anderes)?%%i<tab>
statt nur%%i
, wo<tab>
steht für die tab-Zeichen. Siehe mein update für mehr details./v
ausFINDSTR /v "%%i"
nach dem kopieren-einfügen. Es sollteFINDSTR "%%i"
eigentlich. Aktualisiert meine Antwort.Verwenden Sie FÜR den Befehl zum ausführen eines Befehl für jede Zeile in eine Datei (mit der Option /F). Verwenden Sie FIND, um die Suche der Dateien. Hier ist ein Beispiel, das zeigt Ihre Verwendung.
FINDEN Berichte Spiele aber auch fügt eine Zeile beginnend mit" - - -", um anzuzeigen, welche Datei war das match zu finden. Das ist, warum die erste FÜR die dumps auf eine temp-Datei. Die zweite für leckereien wie Kommentare jede Zeile, die mit "-" und so filtert sich heraus, dass Informationen aus FINDEN. Wenn Sie die Stapelverarbeitung ausführen, mehr als einmal wird es löschen Sie alle vorherigen results.txt Datei.
Ist es wichtig, dass die textlist.txt Datei NICHT im selben Ordner wie den Ordner suchen, sonst wird sein Inhalt in den Ergebnissen enthalten.
> results.txt (for /F "delims=" %%i in (textlist.txt) do (find "%%i" C:\folder\*.txt | findstr /v "^---- ^$"))
.