Der FIND-Befehl
Um in mehreren Dateien Text über die Windows-Eingabeaufforderung oder Batch-Dateien zu suchen, können Sie den FIND-Befehl verwenden, der seit den Zeiten von MS DOS vorhanden ist und auch in Windows 11 verfügbar ist. Er ist ähnlich dem Unix-Befehl grep
, unterstützt jedoch keine regulären Ausdrücke. Um nach dem Wort borogoves
im aktuellen Verzeichnis zu suchen, verwenden Sie diese Syntax:
find "borogoves" *
Beachten Sie, dass die doppelten Anführungszeichen um das Muster obligatorisch sind. Wenn Sie PowerShell verwenden, müssen Sie auch einfache Anführungszeichen verwenden:
find '"borogoves"' *
Anstelle des Sternzeichens (*
) können Sie eine Dateimaske wie *.htm?
angeben. Der find
-Befehl zeigt die Namen der Dateien an, die er scannet, auch wenn er in diesen Dateien keine Übereinstimmungen findet:
Die Suche ist standardmäßig fall-sensitiv, daher müssen Sie normalerweise den /I
-Schalter hinzufügen, um Groß- und Kleinschreibung als gleichwertig zu behandeln:
find /I "<a href=" *.htm
Wenn Sie die zu durchsuchende Datei nicht angeben, wartet find
auf Texteingabe von stdin, damit Sie Ausgabe von einem anderen Befehl pipen können. Zum Beispiel können Sie alle unterstützten Kopierbefehle in Windows auflisten:
help | find /i "copy"
Ein weiterer Schalter, /V
, ermöglicht es Ihnen, alle Zeilen zu finden, die das Muster nicht enthalten, ähnlich dem grep -v
-Befehl.
In Batch-Dateien können Sie die Tatsache nutzen, dass der find
-Befehl den Exit-Code (errorlevel) auf 1 setzt, wenn das Muster nicht gefunden wird. Zum Beispiel können Sie überprüfen, ob der Computer eine 64-Bit- oder 32-Bit-Version von Windows ausführt:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
Die FINDSTR-Befehl: Regulärer Ausdruckssuche
Wenn Sie einen regulären Ausdruck suchen müssen, versuchen Sie den FINDSTR
-Befehl, der in Windows XP eingeführt wurde. Aus historischen Gründen unterstützt findstr
eine eingeschränkte Teilmenge von regulären Ausdrücken, sodass Sie nur diese Regex-Funktionen verwenden können:
- Der Punkt
.
entspricht jeder beliebigen Zeichen außer Zeilenvorschub und erweiterten ASCII-Zeichen. - Zeichenlisten
[abc]
entsprechen einem der angegebenen Zeichen (a
,b
oderc
). - Zeichenlistenbereiche
[a-z]
entsprechen einem beliebigen Buchstaben vona
bisz
. - Das Sternchen (
*
) zeigt an, dass das vorherige Zeichen null oder mehrmals wiederholt werden kann. - Die Symbole
\<
und\>
markieren den Anfang und das Ende eines Wortes. - Das Caret (
^
) und das Dollarzeichen ($
) bezeichnen den Anfang und das Ende einer Zeile. - Die Backslash (
\
) entkommentiert jedes Metazeichen, sodass Sie wörtliche Zeichen finden können. Zum Beispiel findet\$
das Dollarzeichen selbst.
Findstr unterstützt keine Zeichentypen (\d
), Alternierung (|
) oder andere Wiederholungen (+
oder {5}
).
Die grundlegende Syntax ist die gleiche wie für den FIND
Befehl:
findstr "\<20[0-9][0-9]\>" *.htm
Dieser Befehl findet alle Jahre, die mit 2000 beginnen, in den .htm
Dateien des aktuellen Verzeichnisses. Genau wie bei find
verwenden Sie den /I
Schalter für eine Groß-/Kleinschreibung ignorierende Suche:
FINDSTR Einschränkungen und Eigenheiten
Zeichenlisten [a-z]
sind immer Groß-/Kleinschreibung ignorierend, also passt echo ABC | findstr "[a-z]"
.
Das Leerzeichen fungiert als Alternativ-Metasymbol in findstr
, sodass eine Suchanfrage wie findstr "new shoes" *
alle Zeilen findet, die entweder new
oder shoes
enthalten. Leider gibt es keine Möglichkeit, das Leerzeichen zu escapen und es als Literalzeichen in einem regulären Ausdruck zu verwenden. Zum Beispiel können Sie keine Zeilen finden, die mit einem Leerzeichen beginnen.
Syntaxfehler in regulären Ausdrücken werden ignoriert. Zum Beispiel wird findstr "[" *
alle Zeilen finden, die das Zeichen [
enthalten.
Wenn die Datei Unix-Zeilentrennzeichen (LF) enthält, funktioniert das Metazeichen $
nicht korrekt. Wenn die letzte Zeile einer Datei kein Zeilentrennzeichen hat, wird findstr
es nicht finden können. Zum Beispiel wird findstr "</html>$" *
nicht funktionieren, wenn es nach </html> kein CR+LF gibt.
Frühere Windows-Versionen hatten Einschränkungen bei der Zeilenlänge für find
und findstr
, sowie andere Befehle. Neuere Versionen haben diese Grenzen aufgehoben, sodass Sie sich keine Sorgen mehr darüber machen müssen. Siehe diese StackOverflow-Frage für findstr
-Einschränkungen und -Fehler, insbesondere in frühen Windows-Versionen.
Der findstr-Befehl arbeitet in der OEM (MS DOS)-Codepage; das Punkt-Metacharakter stimmt nicht mit den erweiterten ASCII-Zeichen überein. Daher ist der Befehl für nicht-englische Texte nicht sehr nützlich. Darüber hinaus können Sie keine Unicode-Zeichen (UTF-8 oder UTF-16) durchsuchen.
Zusammenfassung
Sie können weitere Schalter erfahren, indem Sie findstr /?
oder find /?
eingeben. Zum Beispiel ermöglichen die zusätzlichen Schalter die Suche in Unterverzeichnissen oder das Drucken von Zeilennummern. Sie können sich auch auf die offizielle Dokumentation beziehen.
Grundsätzlich sind die find
und findstr
Befehle veraltet und kommen mit verschiedenen Eigenheiten und Einschränkungen.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt