et0815
Goto Top

Begriff in Dateiliste mit Texten suchen und Dateiname mit Zeile ausgeben ohne Anzeige der Dateien ohne dem Suchbegriff

Hallo! Ich möchte aus einem Ordner mit mehreren hundert Textdateien, welche ein Programm ständig anlegt, Begriffe suchen. Dabei benötige ich den/die Dateinamen in der sich der Suchbegriff befindet mit Ausgabe der kopletten Zeile.

Zum Suchen der Begriffe in den Textdateien, verwende ich bis jetzt den FIND-Befehl. Denn ich benötige den Dateinamen und die Zeile mit den entsprechendem Begriff. Bei der Suche mit FIND, werden mir dann die Dateinamen und die Zeilen mit dem Suchbegriff mit ausgegeben. Nur dabei werden auch die weit über hundert anderen Textdateien, welche den Begriff nicht mit behinhalten mit aufgelistet. Nun meine Frage, wie kann ich das Auflisten der Dateien, welche den Begriff nicht beinhalten unterbinden?

Content-Key: 178773

Url: https://administrator.de/contentid/178773

Printed on: April 18, 2024 at 17:04 o'clock

Member: bastla
bastla Jan 11, 2012 at 22:01:49 (UTC)
Goto Top
Hallo ET0815 und willkommen im Forum!

Verwende anstelle von "find" einfach "findstr" ...

Grüße
bastla
Member: ET0815
ET0815 Jan 13, 2012 at 21:18:46 (UTC)
Goto Top
Oh danke. Hatte das schonmal probiert aber immer die falschen Schalter gesetzt, aber nun funktionierts. Besteht eigentlich auch die Möglichkeit, mehrere Suchbegriffe die in einer Zeile stehen sollen zu suchen? Es sollen quasi zwei oder noch mehr Kriterien zu treffen.
Member: bastla
bastla Jan 13, 2012 at 21:30:21 (UTC)
Goto Top
HalloET0815!
Es sollen quasi zwei oder noch mehr Kriterien zu treffen.
Versuch es so:
<code type="plain>findstr "Kriterium1" *.txt|findstr "Kriterium2"|findstr "Kriterium3"

Grüße
bastla
Member: ET0815
ET0815 Jan 14, 2012 at 00:12:24 (UTC)
Goto Top
Danke, läuft super! Jetzt hab ich nur noch das Problem, das Begriffe mit Umlauten nicht gefunden werden. Wie mach ich das nur wieder? Sorry, ich weiß ich nerver mit meinen für euere Verhältnissen einfach Sachen.
Member: bastla
bastla Jan 14, 2012 at 10:39:49 (UTC)
Goto Top
Hallo ET0815!

Versuch es mit dem Umweg über eine "Kriteriendatei": Erstelle dazu zB die Datei "D:\Kriterium1.txt" mit dem Suchkriterium (bzw für eine "Oder"-Verknüpfung auch mehrere Kriterien in jeweils eigenen Zeilen) als Inhalt und verwende sie dann so:
findstr /g:"D:\Kriterium1.txt" *.txt
Grüße
bastla
Member: ET0815
ET0815 Jan 15, 2012 at 22:34:27 (UTC)
Goto Top
Danke bastal, funkioniert ebenfalls super! Einmal bräuchte ich deine Hilfe nochmal. Kann man irgendwie das Erstellungsdatum der entsprechenden Dateien mit in der Zeil mit dem gefundenem Begriff ausgeben? Aufgrund der hohen Datenmenge, bräuchte ich dies, zwecks der Übersichtlichkeit. Danke schonmal im vorraus.

Gruß
Toni
Member: bastla
bastla Jan 16, 2012 at 11:15:46 (UTC)
Goto Top
Hallo ET0815!

Änderungsdatum wäre einfacher - ungetestet etwa so:
@echo off & setlocal
set "Ordner=D:\Ordner mit mehreren hundert Textdateien"  
set "Ausgabe=D:\Ergebnisse.txt"  

pushd "%Ordner%"  
del "%Ausgabe%" 2>nul  
(
    for /f "tokens=1* delims=:" %%i in ('findstr /g:"D:\Kriterium1.txt" *.txt') do echo %%i_%%~ti_%%j  
    for /f "tokens=1* delims=:" %%i in ('findstr /g:"D:\Kriterium2.txt" *.txt') do echo %%i_%%~ti_%%j  
)>>"%Ausgabe%"  
popd
Grüße
bastla

[Edit] auf Ausgabe Datum geändert [/Edit]
Member: ET0815
ET0815 Jan 16, 2012 at 20:03:01 (UTC)
Goto Top
Danke für deine Mühe bastla, aber das Ergebnis ist leider das Gleiche wie mit dem einfachen FINDSTR-Befehl. Nur das : Zeichen hinter dem Laufwerksbuchstaben wurde bei der Ausgabe mit einem _ Zeichen ausgetauscht.
Weis nicht ob man den DIR-Befehl mit dem FINDSTR-Befehl kombinieren kann. Habe schon experimentiert, aber ohne auswertbaren Erfolg.

Gruß
Toni

PS: Wobei das Änderungsdatum wäre auch ok, da die Dateien zu einem Archiv gehören und nicht mehr geändert werden. Daher ist das Änderungsdatum=Erstellungsdatum.
Member: bastla
bastla Jan 16, 2012 at 20:13:19 (UTC)
Goto Top
Hallo ET0815!

Wie sieht denn Dein verwendeter Batch aus? In meiner Variante hätte (aufgrund des "pushd" vorweg) eigentlich nur der Dateiname ausgegeben werden sollen ...

... anyhow - wenn Du vollständige Pfade erhältst, kannst Du ja diese ja wieder zusammensetzen:
for /f "tokens=1-2* delims=:" %%i in ('findstr /g:"D:\Kriterium1.txt" *.txt') do for %%a in ("%%i:%%j") do echo %%~a_%%~ta_%%k
Grüße
bastla

[Edit] auf Ausgabe Datum geändert [/Edit]
Member: ET0815
ET0815 Jan 16, 2012 at 20:25:12 (UTC)
Goto Top
Die Batch ist sehr lang, da diese noch mehr macht, außer das Suchen. Weil du meinst, das das Änderungsdatum einfacher geht, wie mache ich dies?

Zur Zeit bin ich so weit:
...
findstr /i /c:"%suche%" %archiv%*.txt >> Suchergebnis_%Suche2%.txt
start Suchergebnis_%Suche2%.txt

Den Teil den du weiter oben geschrieben hast, nehm ich zur Zeit nur in experimentellen Dateien (also die Suche mit mehreren Begriffen). Jendenfalls hab ich deinen vorletzten Script in einer separaten Datei nur mit deinem Inhalt auf meine Ordner zugeschnitten ohne mein ganzes drum herum getestet.

Gruß
Toni
Member: bastla
bastla Jan 16, 2012 at 20:39:46 (UTC)
Goto Top
Hallo ET0815!

Vorweg: Verwende bitte zum Posten von Codeschnipsen die passende ...
Weil du meinst, das das Änderungsdatum einfacher geht, wie mache ich dies?
Wenn Du die Datei in der Schleifenvariablen einer "for"-Schleife hast, kannst Du "~t" dafür verwenden (siehe dazu ziemlich am Ende der Ausgabe von "for /?") - im einfachsten Fall (zum Testen in der CMD-Shell, daher nur ein %-Zeichen):
for %i in (*.txt) do @echo %~ti_%i
Da das Ergebnis eines "findstr" für mehrere Dateien dem Schema
Dateiname:den Suchbegriff enthaltende Zeile
entspricht, bietet es sich an, am ersten ":" zu trennen.

Soferne Deine Variable %archiv% eine Pfadangabe enthält, sieht die Ausgabe so aus:
Laufwerk:\Pfad\Dateiname:den Suchbegriff enthaltende Zeile
- es wird hier demnach bei einer Zerlegung anhand des ":" ein Ergebnis in 3 Teilen erzeugt, von dem die ersten beiden (im Beispiel unten %%i und %%j) zusammen den gesamten Dateipfad ergeben (in Teil 3 = %%k steht dann die Textzeile) - daher (jetzt zur Verwendung in einem Batch):
for /f "tokens=1-2* delims=:" %%i in ('findstr /i /c:"%suche%" %archiv%*.txt') do for %%a in ("%%i:%%j") do >>Suchergebnis_%Suche2%.txt echo %%~a_%%~ta_%%k
Grüße
bastla

[Edit] Ich weiß auch nicht, weshalb ich die ganze Zeit anstatt des Datums die Dateigröße ausgeben wollte face-confused - ist jetzt (auch oben) korrigiert [/Edit]
Member: ET0815
ET0815 Jan 16, 2012 at 21:32:46 (UTC)
Goto Top
Ich danke dir wie verrückt, genau so hab ich mir das vorgestellte! Tausend Dank! Hoffe ich darf weiter nerven, wenn ich wieder Sorgen habe. face-smile