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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178773
Url: https://administrator.de/contentid/178773
Ausgedruckt am: 15.11.2024 um 11:11 Uhr
12 Kommentare
Neuester Kommentar
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:
Grüße
bastla
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
bastla
Hallo ET0815!
Änderungsdatum wäre einfacher - ungetestet etwa so:
Grüße
bastla
[Edit] auf Ausgabe Datum geändert [/Edit]
Ä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
bastla
[Edit] auf Ausgabe Datum geändert [/Edit]
Hallo ET0815!
Wie sieht denn Dein verwendeter Batch aus? In meiner Variante hätte (aufgrund des "
... anyhow - wenn Du vollständige Pfade erhältst, kannst Du ja diese ja wieder zusammensetzen:
Grüße
bastla
[Edit] auf Ausgabe Datum geändert [/Edit]
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
bastla
[Edit] auf Ausgabe Datum geändert [/Edit]
Hallo ET0815!
Vorweg: Verwende bitte zum Posten von Codeschnipsen die passende ...
Da das Ergebnis eines "
entspricht, bietet es sich an, am ersten ":" zu trennen.
Soferne Deine Variable %archiv% eine Pfadangabe enthält, sieht die Ausgabe so aus:
- 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):
Grüße
bastla
[Edit] Ich weiß auch nicht, weshalb ich die ganze Zeit anstatt des Datums die Dateigröße ausgeben wollte - ist jetzt (auch oben) korrigiert [/Edit]
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
findstr
" für mehrere Dateien dem SchemaDateiname:den Suchbegriff enthaltende Zeile
Soferne Deine Variable %archiv% eine Pfadangabe enthält, sieht die Ausgabe so aus:
Laufwerk:\Pfad\Dateiname:den Suchbegriff enthaltende Zeile
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
bastla
[Edit] Ich weiß auch nicht, weshalb ich die ganze Zeit anstatt des Datums die Dateigröße ausgeben wollte - ist jetzt (auch oben) korrigiert [/Edit]