Nur findstr Erstfund ausgeben
Bin komplett neu hier und kenne mich überhaupt nicht aus.
Kann man mit dem Befehl findstr auch nur den Erstfund einer definierten Zeichenfolge aus vielen txt Files ausgeben?
Gruss
Kann man mit dem Befehl findstr auch nur den Erstfund einer definierten Zeichenfolge aus vielen txt Files ausgeben?
Gruss
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 368572
Url: https://administrator.de/contentid/368572
Ausgedruckt am: 19.03.2024 um 11:03 Uhr
18 Kommentare
Neuester Kommentar
Hallo neuster,
wenn Dich nur der erste Fund interessiert, könntest Du in leichter Abwandlung von colinardos Skript auch die For-Schleife beim ersten Fund verlassen und könntest Dir somit die Durchsuchung aller weiteren Zeilen und Dateien sparen.
Falls Dich nicht der Zeileninhalt interessiert, der "SuchMich" enthält, sondern der Name der Datei in der "SuchMich" gefunden wurde, müsstest Du ein zusätzliches
Gruß Frank
wenn Dich nur der erste Fund interessiert, könntest Du in leichter Abwandlung von colinardos Skript auch die For-Schleife beim ersten Fund verlassen und könntest Dir somit die Durchsuchung aller weiteren Zeilen und Dateien sparen.
@echo off
set "found="
for /f "delims=" %%a in ('findstr /ic:"SuchMich" "D:\Ordner\*.txt" 2^>nul') do (
set "found=%%a"
goto gefunden
)
:gefunden
echo %found%
/m
bei findstr angeben:('findstr /m /ic:"SuchMich" "D:\Ordner\*.txt" 2^>nul')
Gruß Frank
könntest Du in leichter Abwandlung von colinardos Skript auch die For-Schleife beim ersten Fund verlassen und könntest Dir somit die Durchsuchung aller weiteren Zeilen und Dateien sparen.
Servus Frank. Das stimmt so leider nicht, die Suche wird vor dem durchlaufen ausgeführt und die Zeilen trotzdem alle durchlaufen auch wenn man meint daß die Schleife durch das goto vorher verlassen wird, durchläuft die cmd im Hintergrund trotzdem alle Zeilen des findstr Outputs (nur führt sie im Schleifen-Body dann einfach nichts mehr aus und expandiert nur noch), beide Methoden schenken sich also nichts und sind leider gleich ineffizient.https://stackoverflow.com/questions/6728798/exiting-out-of-a-for-loop-in ...
Da sollte man dann besser gleich die Skriptsprache wechseln oder ein eigenes Tool hernehmen wenn es einem um Performance geht.
Grüße Uwe
Hallo Marc,
Das kann ja bei dir auch nicht . Erstens leitest du im Schleifenkopf um und zweitens nutzt du unescaped verschachtelte Anführungszeichen im Findstr-Pattern.
Dir ist schon klar daß der Suchstring bei der Nutzung von /R also Regex Pattern interpretiert wird?! Also Sonderzeichen wie Punkt, das Plus etc. mit Backslash escaped werden müssen wen sie litteral genutzt werden sollen!
Du musst uns also schon genau sagen was und wie du suchen willst.
Das kann ja bei dir auch nicht . Erstens leitest du im Schleifenkopf um und zweitens nutzt du unescaped verschachtelte Anführungszeichen im Findstr-Pattern.
@echo off
cd /d "%~dp0"
set "found="
for /f "delims=" %%a in ('findstr /r "7\.000[0-9]00E\+1" *.txt 2^>nul') do if not defined found set "found=%%a"
>"C:\Users\pum\Desktop\Messungen\Zusammenfassung.txt" echo(%found%
Du musst uns also schon genau sagen was und wie du suchen willst.
Zitat von @neuster:
Konnte heute mal die, für mich kryptischen Zeichenfolgen ausprobieren.
Verstehen tu ich es immer noch nicht
P.s. Lesen bildetKonnte heute mal die, für mich kryptischen Zeichenfolgen ausprobieren.
Verstehen tu ich es immer noch nicht
https://www.windowspro.de/wolfgang-sommergut/findstr-das-grep-fuer-windo ...
Ok dann haben wir dich hier wohl missverstanden.
Allen voran das Tutorial zur For Schleife in dem deine Fragen beantwortet werden.
Btw. lerne lieber gleich eine modernere Skriptsprache.
@echo off &setlocal enabledelayedexpansion
cd /d "%~dp0"
>"C:\Users\pum\Desktop\Messungen\Zusammenfassung.txt" (for %%a in (*.txt) do (
set "found="
for /f "delims=" %%b in ('findstr "^7\.000[0-9]00E\+1" "%%~a" 2^>nul') do if not defined found set "found=%%b"
echo(!found!
))
Gibts da irgendwelche Bücher für Dummies oder sonst irgend eine Weiterbildungsmöglichkeit?
Hier im Forum die Kategorie Batch & Shell durcharbeiten, da findest du sämtliche Batchgrundlagen bis zum Abwinken, da gibt's nichts was wir hier nicht schon behandelt hätten.Allen voran das Tutorial zur For Schleife in dem deine Fragen beantwortet werden.
Btw. lerne lieber gleich eine modernere Skriptsprache.
Hallo Uwe,
Ich habe gerade mal eine Batch zählen lassen
(ähnlich wie in Deinem Link).
Ohne "REM" geht das in einer Sekunde und gibt nur "1" aus.
Mit "REM" dauert es 40 Sekunden und gibt "1" bis "100000" aus.
Zuerst habe ich daraus geschlossen, dass Deine Aussage nicht korrekt wäre,
dann habe ich es nochmal ohne "REM" aber mit "1,1,10000000" ausprobiert und es hat 90 Sekunden gedauert.
Der erste Gewindigkeitsvorteil liegt also ausschließlich in der nicht weiter ausgeführten Ausgabe begründet, aber gezählt wird dennoch bis zum Ende, bevor
Rhetorisch: Wie kann man eine For-Schleife in eine Sprache implementieren, die kein Break kennt?
Gruß Frank
Zitat von @colinardo:
Das stimmt so leider nicht, die Suche wird vor dem durchlaufen ausgeführt und die Zeilen trotzdem alle durchlaufen auch wenn man meint daß die Schleife durch das goto vorher verlassen wird, durchläuft die cmd im Hintergrund trotzdem alle Zeilen des findstr Outputs (nur führt sie im Schleifen-Body dann einfach nichts mehr aus und expandiert nur noch)
Danke für den Hinweis.Das stimmt so leider nicht, die Suche wird vor dem durchlaufen ausgeführt und die Zeilen trotzdem alle durchlaufen auch wenn man meint daß die Schleife durch das goto vorher verlassen wird, durchläuft die cmd im Hintergrund trotzdem alle Zeilen des findstr Outputs (nur führt sie im Schleifen-Body dann einfach nichts mehr aus und expandiert nur noch)
Ich habe gerade mal eine Batch zählen lassen
(ähnlich wie in Deinem Link).
@echo off
set "wert="
if exist ausgabe.txt del ausgabe.txt
for /l %%i in (1,1,100000) do (
echo For: %%i
echo For: %%i>>ausgabe.txt
set wert=%%i
REM goto fertig
)
:fertig
echo Fertig: %wert%
Mit "REM" dauert es 40 Sekunden und gibt "1" bis "100000" aus.
Zuerst habe ich daraus geschlossen, dass Deine Aussage nicht korrekt wäre,
dann habe ich es nochmal ohne "REM" aber mit "1,1,10000000" ausprobiert und es hat 90 Sekunden gedauert.
Der erste Gewindigkeitsvorteil liegt also ausschließlich in der nicht weiter ausgeführten Ausgabe begründet, aber gezählt wird dennoch bis zum Ende, bevor
:fertig
erreicht wird.Rhetorisch: Wie kann man eine For-Schleife in eine Sprache implementieren, die kein Break kennt?
Gruß Frank
Zitat von @Pedant:
Rhetorisch: Wie kann man eine For-Schleife in eine Sprache implementieren, die kein Break kennt?
naja, das ist mitunter der Grund, warum die Windows-Jünger von den Unixern immer wieder belächelt wurden. Wird auch der Grund sein, warum M$ die Powershell entwickelt hat. Leider haben das noch nicht alle mitbekommen und quälen sich mit so einem Mist herum Rhetorisch: Wie kann man eine For-Schleife in eine Sprache implementieren, die kein Break kennt?
Zitat von @Pedant:
Rhetorisch: Wie kann man eine For-Schleife in eine Sprache implementieren, die kein Break kennt?
Am besten die Ausgabe gleich zu Beginn auf eine Zeile einschränkenRhetorisch: Wie kann man eine For-Schleife in eine Sprache implementieren, die kein Break kennt?
for /f "tokens=1* delims=:" %%a in ('findstr /n "BlaBla" "Datei.txt" ^| findstr "^1:" 2^>nul') do echo %%b
Den Berufsschullehrern sollte man mal auf die Finger klopfen das sie den Jüngern immer noch primär Batch einpflanzen wollen, dann doch lieber gleich Bash. Das ist zwar einerseits nicht schlecht wenn man es (als Backup) beherrscht, andererseits schauen die dann oft nicht mehr über den Tellerrand.
Hallo Uwe,
Es bleibt bei For ohne Break und das ist doof.
Gruß Frank
Zitat von @colinardo:
Am besten die Ausgabe gleich zu Beginn auf eine Zeile einschränken
Das würde aber auch nur die Ausgabe beschränken und nicht verhindern, dass "BlaBla" in allen Zeilen von "Datei.txt" gesucht wird.Am besten die Ausgabe gleich zu Beginn auf eine Zeile einschränken
for /f "tokens=1* delims=:" %%a in ('findstr /n "BlaBla" "Datei.txt" ^| findstr "^1:" 2^>nul') do echo %%b
Es bleibt bei For ohne Break und das ist doof.
Gruß Frank
Zitat von @Pedant:
Das würde aber auch nur die Ausgabe beschränken und nicht verhindern, dass "BlaBla" in allen Zeilen von "Datei.txt" gesucht wird.
Naja suchen muss findstr ja auf jeden Fall erst mal im ganzen File, das zweite verhindert dann das mehr Zeilen (nur eine) an den Schleifenkörper gelangen und Findstr ist da einiges schneller als der for loop selbst.Das würde aber auch nur die Ausgabe beschränken und nicht verhindern, dass "BlaBla" in allen Zeilen von "Datei.txt" gesucht wird.
Es bleibt bei For ohne Break und das ist doof.
Alternativen gibt's ja Gott sei Dank genug, also lasst die Leichen im Keller .Case closed
Grüße Uwe
An den TO: Bitte noch als gelöst markieren. Merci.