Suche über die Windows-Befehlszeile

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 oder c).
  • Zeichenlistenbereiche [a-z] entsprechen einem beliebigen Buchstaben von a bis z.
  • 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