Vorwort
Viele der Informationen in dieser Antwort wurden basierend auf Experimenten gesammelt, die auf einem Vista-Computer ausgeführt wurden. Sofern nicht ausdrücklich anders angegeben, habe ich nicht bestätigt, ob die Informationen für andere Windows-Versionen gelten.
FINDSTR Ausgabe
Die Dokumentation stört nie die Ausgabe von FINDSTR zu erklären. Es spielt darauf an, dass übereinstimmende Zeilen gedruckt werden, aber nicht mehr.,
Das Format der Ausgabe der übereinstimmenden Zeile lautet wie folgt:
Dateiname: Zeilennummer:lineOffset: text
wobei
Dateiname: = Der Name der Datei, die die übereinstimmende Zeile enthält. Der Dateiname wird nicht gedruckt, wenn die Anforderung explizit für eine einzelne Datei oder bei der Suche nach Piped-Eingaben oder umgeleiteten Eingaben erfolgt ist. Beim Drucken enthält der Dateiname immer alle angegebenen Pfadinformationen. Zusätzliche Pfadinformationen werden hinzugefügt, wenn die Option /S
verwendet wird. Der gedruckte Pfad ist immer relativ zum angegebenen Pfad oder relativ zum aktuellen Verzeichnis, falls keiner angegeben ist.,
Hinweis-Das Dateinamenpräfix kann bei der Suche nach mehreren Dateien vermieden werden, indem die nicht standardmäßigen (und schlecht dokumentierten) Platzhalter <
und >
verwendet werden. Die genauen Regeln für die Funktionsweise dieser Platzhalter finden Sie hier. Schließlich können Sie sich dieses Beispiel ansehen, wie die nicht standardmäßigen Platzhalter mit FINDSTR funktionieren.
Zeilennummer: = Die Zeilennummer der übereinstimmenden Zeile, die als Dezimalwert dargestellt wird, wobei 1 die erste Zeile der Eingabe darstellt. Wird nur gedruckt, wenn die Option /N
angegeben ist.,
lineOffset: = Der dezimale Byte-Offset des Beginns der übereinstimmenden Zeile, wobei 0 das 1.Zeichen der 1. Zeile darstellt. Nur dann gedruckt wird, wenn /O
– option angegeben ist. Dies ist nicht der Versatz der Übereinstimmung innerhalb der Zeile. Es ist die Anzahl der Bytes vom Anfang der Datei bis zum Anfang der Zeile.
text = Die binäre Darstellung der übereinstimmenden Zeile, einschließlich etwaiger <CR> und/oder <LF>., Aus der Binärausgabe wird nichts ausgelassen, sodass in diesem Beispiel, das mit allen Zeilen übereinstimmt, eine exakte Binärkopie der Originaldatei erstellt wird.
FINDSTR "^" FILE >FILE_COPY
Die Option /A legt nur die Farbe der Ausgabe fileName:, LineNumber: und lineOffset: fest. Der Text der übereinstimmenden Zeile wird immer mit der aktuellen Konsolenfarbe ausgegeben. Die Option /A hat nur dann Wirkung, wenn die Ausgabe direkt auf der Konsole angezeigt wird. Die Option /A hat keine Auswirkung, wenn die Ausgabe in eine Datei umgeleitet oder weitergeleitet wird., In der Antwort von Aacini finden Sie eine Beschreibung des fehlerhaften Verhaltens, wenn die Ausgabe auf CON umgeleitet wird.
Die meisten Steuerzeichen und viele erweiterte ASCII-Zeichen werden unter XP als Punkte angezeigt
FINDSTR unter XP zeigt die meisten nicht druckbaren Steuerzeichen aus übereinstimmenden Zeilen als Punkte (Punkte) auf dem Bildschirm an. Die folgenden Steuerzeichen sind Ausnahmen; Sie werden als sich selbst angezeigt: 0x09 Tab, 0x0A Zeilenvorschub, 0x0B Vertikale Registerkarte, 0x0C Formularvorschub, 0x0D Wagenrücklauf.
XP FINDSTR konvertiert auch eine Reihe erweiterter ASCII-Zeichen in Punkte., Die erweiterten ASCII-Zeichen, die auf XP als Punkte angezeigt werden, sind dieselben wie die, die transformiert werden, wenn sie in der Befehlszeile angegeben werden. Siehe den Abschnitt „Zeichenlimits für Befehlszeilenparameter-Erweiterte ASCII-Transformation“, später in diesem Beitrag
Steuerzeichen und erweitertes ASCII werden unter XP nicht in Punkte konvertiert, wenn die Ausgabe weitergeleitet, in eine Datei umgeleitet oder innerhalb einer FOR IN() Klausel.
Vista und Windows 7 zeigen immer alle Zeichen als sich selbst an, niemals als Punkte.,
die Return-Codes (ERRORLEVEL)
- 0 (success)
- Übereinstimmung gefunden wurde, die in mindestens einer Zeile von mindestens einer Datei.
- 1 (Fehler)
- In keiner Zeile einer Datei wurde eine Übereinstimmung gefunden.,iv id=“b01f5d4aef“>,
/D:
, oder/G:
- Datei angegeben durch
/F:file
oder/G:file
nicht gefunden
- In keiner Zeile einer Datei wurde eine Übereinstimmung gefunden.,iv id=“b01f5d4aef“>,
- 255 (fehler)
- Zu viele reguläre Ausdruck Zeichenklasse Begriffe
siehe Regex Zeichenklasse Term Limit und BUG in Teil 2 der Antwort
- Zu viele reguläre Ausdruck Zeichenklasse Begriffe
Quelle der zu suchenden Daten (Aktualisiert basierend auf Tests mit Windows 7)
Findstr kann Daten aus nur einer der folgenden Quellen suchen:
-
Dateinamen als Argumente angegeben und/oder mit der
/F:file
Option., -
stdin über Umleitung
findstr "searchString" <file
-
Datenstrom aus einer Pipe
type file | findstr "searchString"
Argumente/Optionen haben Vorrang vor Umleitung, die Vorrang vor Weiterleitungsdaten hat.
Dateinamenargumente und /F:file
können kombiniert werden. Es können mehrere Dateinamenargumente verwendet werden. Wenn mehrere /F:file
Optionen angegeben sind, wird nur die Letzte verwendet. Platzhalter sind in Dateinamenargumenten zulässig, jedoch nicht in der Datei, auf die /F:file
.,
Quelle der Suchzeichenfolgen (basierend auf Tests mit Windows 7 aktualisiert)
Die Optionen /G:file
und /C:string
können kombiniert werden. Es können mehrere /C:string
Optionen angegeben werden. Wenn mehrere /G:file
Optionen angegeben sind, wird nur die Letzte verwendet. Wenn entweder /G:file
oder /C:string
verwendet wird, dann werden alle nicht-options-Argumente ausgegangen zu sein, Dateien zu suchen., Wenn weder /G:file
noch /C:string
verwendet wird, wird das erste Argument ohne Option als eine durch Leerzeichen getrennte Liste von Suchbegriffen behandelt.
Dateinamen dürfen bei Verwendung der /F:FILE
– Option nicht in der Datei angegeben werden.
Dateinamen können Leerzeichen und andere Sonderzeichen enthalten. Die meisten Befehle erfordern, dass solche Dateinamen in Anführungszeichen gesetzt werden. Aber die FINDSTR /F:files.txt
option erfordert, dass Dateinamen in den Dateien.txt darf NICHT zitiert werden. Die Datei wird nicht gefunden, wenn der Name angegeben wird.
BUG – Kurz-8.,3 Dateinamen können brechen die /D
und /S
Optionen
Wie bei allen Windows-Befehle, FINDSTR wird versuchen, sowohl den langen Namen und den kurzen Dateinamen übereinstimmen, wenn für Dateien suchen zu suchen. Angenommen, der aktuelle Ordner enthält die folgenden nicht leeren Dateien:
b1.txtb.txt2c.txt
Der folgende Befehl findet alle 3 Dateien erfolgreich:
findstr /m "^" *.txt
b.txt2
stimmt überein, da der entsprechende Kurzname B9F64~1.TXT
übereinstimmt., Dies steht im Einklang mit dem Verhalten aller anderen Windows-Befehle.
Aber ein Fehler mit den Optionen /D
und /S
bewirkt, dass die folgenden Befehle nur b1.txt
findstr /m /d:. "^" *.txtfindstr /m /s "^" *.txt
Der Fehler verhindert, dass b.txt2
gefunden wird, sowie alle Dateidateien, die namen, die nach b.txt2
im selben Verzeichnis sortiert werden. Zusätzliche Dateien, die zuvor sortiert wurden, wie a.txt
, werden gefunden., Zusätzliche Dateien, die später sortiert werden, wie d.txt
, werden übersehen, sobald der Fehler ausgelöst wurde.
Jedes gesuchte Verzeichnis wird unabhängig behandelt. Beispielsweise würde die Option /S
erfolgreich in einem untergeordneten Ordner suchen, nachdem Dateien im übergeordneten Ordner nicht gefunden wurden, aber sobald der Fehler dazu führt, dass ein kurzer Dateiname im untergeordneten Ordner fehlt, werden auch alle nachfolgenden Dateien in diesem untergeordneten Ordner übersehen.
Die Befehle funktionieren fehlerfrei, wenn auf einem Computer mit deaktivierter NTFS 8.3-Namensgenerierung dieselben Dateinamen erstellt werden., Natürlich würde b.txt2
nicht gefunden, aber c.txt
würde richtig gefunden.
Nicht alle Kurznamen lösen den Fehler aus. Alle Fälle von fehlerhaftem Verhalten, die ich gesehen habe, beinhalten eine Erweiterung, die länger als 3 Zeichen ist, mit einem kurzen 8.3-Namen, der genauso beginnt wie ein normaler Name, für den kein 8.3-Name erforderlich ist.
Der Fehler wurde unter XP, Vista und Windows 7 bestätigt.,
Nicht druckbare Zeichen und die/P
Option
Die/P
Option bewirkt, dass FINDSTR jede Datei überspringt, die einen der folgenden Dezimalbyte-Codes enthält:
4-7, 14-25, 27-31.
Anders ausgedrückt, die Option /P
überspringt nur Dateien, die nicht druckbare Steuerzeichen enthalten. Steuerzeichen sind Codes kleiner oder gleich 31 (0x1F)., FINDSTR behandelt die folgenden Steuerzeichen als druckbar:
8 0x08 backspace 9 0x09 horizontal tab10 0x0A line feed11 0x0B vertical tab12 0x0C form feed13 0x0D carriage return26 0x1A substitute (end of text)
Alle anderen Steuerzeichen werden als nicht druckbar behandelt, deren Vorhandensein dazu führt, dass die Option /P
die Datei überspringt.
Piped-und umgeleitete Eingaben können <CR><LF>
angehängt haben
Wenn die Eingabe weitergeleitet wird und das letzte Zeichen des Streams nicht <LF>
ist, hängt FINDSTR automatisch <CR><LF>
an die Eingabe an. Dies wurde unter XP, Vista und Windows 7 bestätigt., (Früher dachte ich, dass die Windows-Pipe für die Änderung der Eingabe verantwortlich war, aber seitdem habe ich festgestellt, dass FINDSTR die Änderung tatsächlich durchführt.)
Dasselbe gilt für umgeleitete Eingaben unter Vista. Wenn das letzte Zeichen einer Datei, die als umgeleitete Eingabe verwendet wird, nicht <LF>
ist, hängt FINDSTR automatisch <CR><LF>
an die Eingabe an. XP und Windows 7 ändern die Eingabe jedoch nicht.
FINDSTR hängt unter XP und Windows 7, wenn die umgeleitete Eingabe nicht mit <LF>
Dies ist eine böse „Funktion“ unter XP und Windows 7., Wenn das letzte Zeichen einer Datei, die als umgeleitete Eingabe verwendet wird, nicht mit <LF>
endet, bleibt FINDSTR auf unbestimmte Zeit hängen, sobald es das Ende der umgeleiteten Datei erreicht hat.
Die letzte Zeile der Piped-Daten kann ignoriert werden, wenn sie aus einem einzelnen Zeichen besteht
Wenn die Eingabe weitergeleitet wird und die letzte Zeile aus einem einzelnen Zeichen besteht, dem nicht <LF>
, ignoriert FINDSTR die letzte Zeile vollständig.,
Beispiel-Der erste Befehl mit einem einzelnen Zeichen und ohne <LF>
stimmt nicht überein, aber der zweite Befehl mit 2 Zeichen funktioniert einwandfrei, ebenso wie der dritte Befehl, der ein Zeichen mit einem Zeilenumbruch hat.
> set /p "=x" <nul | findstr "^"> set /p "=xx" <nul | findstr "^"xx> echo x| findstr "^"x
Vom DosTips-Benutzer Sponge Belly bei new findstr bug gemeldet. Bestätigt XP, Windows 7 und Windows 8. Habe noch nichts von Vista gehört. (Ich habe Vista nicht mehr zu testen).
Option syntax
Option buchstaben sind nicht groß – / kleinschreibung, so /i
und /I
sind äquivalent.,
Optionen können entweder mit /
oder -
Optionen können nach einer einzigen verkettet werden /
oder -
. Die verkettete Optionsliste kann jedoch höchstens eine Mehrzeichenoption wie OFF oder F: enthalten, und die Mehrzeichenoption muss die letzte Option in der Liste sein.,
Das Folgende sind alle äquivalenten Möglichkeiten, eine groß-und Kleinschreibung unsensitive Regex-Suche für jede Zeile auszudrücken, die sowohl „Hallo“ als auch „Auf Wiedersehen“ in beliebiger Reihenfolge enthält
-
/i /r /c:"hello.*goodbye" /c:"goodbye.*hello"
-
-i -r -c:"hello.*goodbye" /c:"goodbye.*hello"
-
/irc:"hello.*goodbye" /c:"goodbye.*hello"
Wenn eine Suchzeichenfolge mit einem /
oder -
literal beginnt, dann muss die /C
oder /G
Option verwendet werden. Vielen Dank an Stephan für die Meldung in einem Kommentar (seit gelöscht).,
Länge der Suchzeichenfolge begrenzt
Auf Vista die maximal zulässige Länge für eine einzelne Suchzeichenfolge ist 511 Bytes. Wenn eine Suchzeichenfolge 511 überschreitet, ist das Ergebnis ein Fehler mit ERRORLEVEL 2.
Bei einer Suche nach regulären Ausdrücken beträgt die maximale Länge der Suchzeichenfolge 254. Ein regulärer Ausdruck mit einer Länge zwischen 255 und 511 führt zu einem FINDSTR: Out of memory
Fehler mit ERRORLEVEL 2. Eine reguläre Ausdruckslänge >511 führt zum Fehler .,
Unter Windows XP ist die Länge der Suchzeichenfolge offenbar kürzer. Findstr-Fehler: „Suchzeichenfolge zu lang“: Wie extrahiere und kombiniere ich die Teilzeichenfolge in der „for“ – Schleife?Das XP-Limit beträgt 127 Byte für Literal-und Regex-Suchen.
Zeilenlängenbeschränkungen
Dateien, die als Befehlszeilenargument oder über die Option /F:FILE angegeben sind, haben keine bekannte Zeilenlängenbeschränkung. Die Suche wurde erfolgreich gegen eine 128-MB-Datei durchgeführt, die keine einzige <LF>.
Piped-Daten und umgeleitete Eingaben sind auf 8191 Byte pro Zeile begrenzt., Dieses Limit ist ein“ Feature “ von FINDSTR. Es ist nicht inhärent zu Rohren oder Umleitung. FINDSTR, das umgeleitete stdin-oder Piped-Eingaben verwendet, stimmt niemals mit einer Zeile überein, die >=8k Bytes ist. Zeilen >= 8k erzeugen eine Fehlermeldung an stderr, aber ERRORLEVEL ist immer noch 0, wenn die Suchzeichenfolge in mindestens einer Zeile von mindestens einer Datei gefunden wird.
Standard-Art der Suche: Literal vs regulären Ausdruck/C:"string"
– Der Standardwert ist / L Literal. Die explizite Kombination der Option /L mit /C: „string“ funktioniert sicherlich, ist aber redundant.,
"string argument"
– Der Standardwert hängt vom Inhalt der allerersten Suchzeichenfolge ab. (Denken Sie daran, dass <space> zum Abgrenzen von Suchzeichenfolgen verwendet wird.), Wenn die ersten such-string ein Gültiger regulärer Ausdruck, der mindestens ein un-Escape-meta-Charakter, dann alle such-strings werden als reguläre Ausdrücke behandelt. Andernfalls werden alle Suchzeichenfolgen als Literale behandelt., Beispielsweise wird "51.4 200"
als zwei reguläre Ausdrücke behandelt, da die erste Zeichenfolge einen nicht maskierten Punkt enthält, während "200 51.4"
als zwei Literale behandelt wird, da die erste Zeichenfolge keine Metazeichen enthält.
/G:file
– Der Standardwert hängt vom Inhalt der ersten nicht leeren Zeile in der Datei ab. Wenn die erste Suchzeichenfolge ein gültiger regulärer Ausdruck ist, der mindestens ein nicht maskiertes Metazeichen enthält, werden alle Suchzeichenfolgen als reguläre Ausdrücke behandelt., Andernfalls werden alle Suchzeichenfolgen als Literale behandelt.
Empfehlung-Geben Sie immer explizit /L
literal option oder Option für reguläre Ausdrücke bei Verwendung von "string argument"
oder /G:file
an.
FEHLER-Die Angabe mehrerer Literalsuchzeichenfolgen kann zu unzuverlässigen Ergebnissen führen
Das folgende einfache FINDSTR-Beispiel findet keine Übereinstimmung, obwohl dies der Fall sein sollte.
echo ffffaaa|findstr /l "ffffaaa faffaffddd"
Dieser Fehler wurde unter Windows Server 2003, Windows XP, Vista und Windows 7 bestätigt.,
Basierend auf Experimenten kann FINDSTR fehlschlagen, wenn alle folgenden Bedingungen erfüllt sind:
- Die Suche verwendet mehrere wörtliche Suchzeichenfolgen
- Die Suchzeichenfolgen sind unterschiedlich lang
- Eine kurze Suchzeichenfolge hat eine gewisse Überlappung mit einer längeren Suchzeichenfolge
- Die Suche ist groß-und Kleinschreibung (nein
/I
Option)
Bei jedem Fehler, den ich habe gesehen, es ist immer eine der kürzeren Suchzeichenfolgen, die fehlschlägt.
Weitere Informationen finden Sie unter Warum findet dieses FINDSTR-Beispiel mit mehreren wörtlichen Suchzeichenfolgen keine Übereinstimmung?,
Anführungszeichen und Backslahses in Befehlszeilenargumenten
Hinweis – Die Kommentare des Benutzers MC ND spiegeln die tatsächlichen schrecklich komplizierten Regeln für diesen Abschnitt wider. Es sind 3 verschiedene Parsing-Phasen beteiligt:
- Erster cmd.,exe kann erfordern, dass einige Anführungszeichen als ^ „maskiert werden (wirklich nichts mit FINDSTR zu tun)
- Next FINDSTR verwendet den MS C/C++ – Argumentparser vor 2008, der spezielle Regeln für“ und \
- Nachdem der Argumentparser beendet wurde, behandelt FINDSTR zusätzlich \ gefolgt von einem alphanumerischen Zeichen als Literal, aber \ gefolgt von einem nicht alphanumerischen Zeichen als Escape-Zeichen
Der Rest dieses hervorgehobenen Abschnitts ist nicht 100% korrekt. Es kann als Leitfaden für viele Situationen dienen, aber die oben genannten Regeln sind für das vollständige Verständnis erforderlich.,
Escaping Quote innerhalb der Befehlszeile Suchzeichenfolgen
Anführungszeichen innerhalb der Befehlszeile Suchzeichenfolgen müssen mit Backslash wie\"
maskiert werden. Dies gilt sowohl für Literal-als auch für Regex-Suchzeichenfolgen. Thisinformation bestätigt worden ist auf XP, Vista und Windows 7.Hinweis: Das Zitat muss möglicherweise auch für die CMD maskiert werden.EXE-Parser, aber das hat nichts mit FINDSTR zu tun., Um beispielsweise nach einem einfachen Zitat zu suchen, können Sie Folgendes verwenden:
Backslash in Befehlszeilenliteralsuchzeichenfolgen
Backslash in einer Literalsuchzeichenfolge kann normalerweise als\
oder als\\
dargestellt werden. Sie sind typischerweise gleichwertig. (Es kann in Vista ungewöhnliche Fälle geben, in denen der Backslash immer maskiert werden muss, aber ich habe keinen Vista-Computer zum Testen).Es gibt jedoch einige Sonderfälle:
Bei der Suche nach aufeinanderfolgenden Backslashes müssen alle bis auf die letzten formatiert werden., Der letzte Backslash kann optional maskiert werden.
\\
kann codiert werden als\\\
oder\\\\
\\\
kann codiert werden als\\\\\
oder\\\\\\
Suche nach einem oder mehreren Backslashes, bevor ein Anführungszeichen gesetzt wird. Logicwould suggerieren, dass die Inhalte, die maskiert werden müssen, und jedes der leadingbackslashes brauchen würde, zu entkommen, aber das funktioniert nicht!, Stattdessen muss jeder der führenden Backslashes doppelt maskiert sein,und das Quoteis wird normal maskiert:
\"
muss als\\\\\"
\\"
muss als\\\\\\\\\"
iv id=“Wie bereits erwähnt, müssen bei einem oder mehreren maskierten Anführungszeichen möglicherweise auch
^
für den CMD-ParserDie Informationen in diesem Abschnitt wurden unter XP und Windows 7 bestätigt.,
Backslash in Befehlszeilen-Regex-Suchzeichenfolgen maskieren
Vista only: Backslash in einem Regex muss entweder doppelt maskiert sein wie
\\\\
oder einfach maskiert innerhalb eines Zeichensatzes wieXP und Windows 7: Backslash in einem Regex kann immer als
. Es kann normalerweise als
\\
dargestellt werden. Dies funktioniert jedoch nie, wenn der Backslash einem entflohenen Zitat vorausgeht.,aped quote, muss Sie entweder bedouble entkommen, oder anders codiert als
\"
kodiert werden können, wie\\\\\"
oder\"
\\"
kodiert werden können, wie\\\\\\\\\"
oder\"
oder\\\"
die Flucht Zitieren und Backslash in /G:DATEI literal search strings
Stand-alone-Anführungszeichen und umgekehrte Schrägstriche innerhalb eines wörtlichen suchen string-Datei angegeben /G:Datei müssen nicht entgangen sein, aber Sie werden können.,
"
und \"
gleichwertig sind.
\
und \\
gleichwertig sind.
Wenn die Absicht darin besteht, \ \ zu finden, muss mindestens der führende Backslash maskiert werden. Sowohl \\\
als auch \\\\
funktionieren.
Wenn die Absicht darin besteht, „zu finden“, muss mindestens der führende Backslash maskiert werden. Sowohl \\"
als auch \\\"
funktionieren.,
Escaping Quote und Backslash in /G: DATEI regex Suchzeichenfolgen
Dies ist der einzige Fall, in dem die Escape-Sequenzen wie erwartet auf der Grundlage der Dokumentation arbeiten. Quote ist kein Regex-Metacharacter, daher muss es nicht maskiert werden (kann aber sein). Backslash ist ein Regex-Metacharacter, daher muss es maskiert werden.
Zeichenlimits für Befehlszeilenparameter-Erweiterte ASCII-Transformation
Das Nullzeichen (0x00) kann in keiner Zeichenfolge in der Befehlszeile angezeigt werden. Jedes andere Einzelbytezeichen kann in der Zeichenfolge (0x01 – 0xFF) angezeigt werden., FINDSTR konvertiert jedoch viele erweiterte ASCII-Zeichen, die es in Befehlszeilenparametern findet, in andere Zeichen. Dies hat auf zwei Arten große Auswirkungen:
-
Viele erweiterte ASCII-Zeichen stimmen nicht mit sich selbst überein, wenn sie als Suchzeichenfolge in der Befehlszeile verwendet werden. Diese Einschränkung gilt auch für Literal-und Regex-Suchen. Wenn eine Suchzeichenfolge erweitertes ASCII enthalten muss, sollte stattdessen die Option
/G:FILE
verwendet werden. -
FINDSTR kann eine Datei nicht finden, wenn der Name erweiterte ASCII-Zeichen enthält und der Dateiname in der Befehlszeile angegeben ist., Wenn eine zu durchsuchende Datei im Namen erweitertes ASCII enthält, sollte stattdessen die Option
/F:FILE
verwendet werden.
Hier ist eine vollständige Liste der erweiterten ASCII-Zeichentransformationen, die FINDSTR in Befehlszeilenzeichenfolgen ausführt. Jedes Zeichen wird als dezimaler Byte-Codewert dargestellt. Der erste Code stellt das Zeichen dar, wie es in der Befehlszeile angegeben ist, und der zweite Code stellt das Zeichen dar, in das es umgewandelt wird. Hinweis-diese Liste wurde auf einem US-Rechner zusammengestellt. Ich weiß nicht, welche Auswirkungen andere Sprachen auf diese Liste haben können.,
158 treated as 080 199 treated as 221 226 treated as 071169 treated as 170 200 treated as 043 227 treated as 112176 treated as 221 201 treated as 043 228 treated as 083177 treated as 221 202 treated as 045 229 treated as 115178 treated as 221 203 treated as 045 231 treated as 116179 treated as 221 204 treated as 221 232 treated as 070180 treated as 221 205 treated as 045 233 treated as 084181 treated as 221 206 treated as 043 234 treated as 079182 treated as 221 207 treated as 045 235 treated as 100183 treated as 043 208 treated as 045 236 treated as 056184 treated as 043 209 treated as 045 237 treated as 102185 treated as 221 210 treated as 045 238 treated as 101186 treated as 221 211 treated as 043 239 treated as 110187 treated as 043 212 treated as 043 240 treated as 061188 treated as 043 213 treated as 043 242 treated as 061189 treated as 043 214 treated as 043 243 treated as 061190 treated as 043 215 treated as 043 244 treated as 040191 treated as 043 216 treated as 043 245 treated as 041192 treated as 043 217 treated as 043 247 treated as 126193 treated as 045 218 treated as 043 249 treated as 250194 treated as 045 219 treated as 221 251 treated as 118195 treated as 043 220 treated as 095 252 treated as 110196 treated as 045 222 treated as 221 254 treated as 221197 treated as 043 223 treated as 095198 treated as 221 224 treated as 097
Jedes Zeichen >0, das nicht in der obigen Liste enthalten ist, wird als selbst behandelt, einschließlich <CR>
und <LF>
. Der einfachste Weg, ungerade Zeichen wie <CR>
und <LF>
einzuschließen, besteht darin, sie in eine Umgebungsvariable abzurufen und zu verwenden verzögerte Erweiterung innerhalb des Befehlszeilenarguments.,
Zeichenlimits für Zeichenfolgen in Dateien, die von /G:FILE und /F: FILE Optionen
Das nul (0x00) Zeichen kann in der Datei angezeigt werden, aber es funktioniert wie der C-String-Terminator. Alle Zeichen nach einem Nul-Zeichen werden als andere Zeichenfolge behandelt, als wären sie in einer anderen Zeile.
Die Zeichen <CR>
und <LF>
werden als Zeilenabschlüsse behandelt, die eine Zeichenfolge beenden, und sind nicht in der Zeichenfolge enthalten.
Alle anderen Einzelbyte-Zeichen sind perfekt in einer Zeichenfolge enthalten.,
Unicode-Dateien suchen
FINDSTR kann die meisten Unicode-Dateien (UTF-16, UTF-16LE, UTF-16BE, UTF-32) nicht ordnungsgemäß durchsuchen, da es nicht nach Nul-Bytes suchen kann und Unicode normalerweise viele Nul-Bytes enthält.
Der Befehl TYPE konvertiert UTF-16LE mit Stückliste jedoch in einen einzelnen Byte-Zeichensatz, sodass ein Befehl wie der folgende mit UTF-16LE mit Stückliste funktioniert.
type unicode.txt|findstr "search"
Beachten Sie, dass Unicode-Codepunkte, die von Ihrer aktiven Codepage nicht unterstützt werden, in ?
– Zeichen konvertiert werden.,
Es ist möglich, UTF-8 zu suchen, solange Ihre Suchzeichenfolge nur ASCII enthält. Die Konsolenausgabe von UTF-8-Zeichen mit mehreren Bytes ist jedoch nicht korrekt. Wenn Sie die Ausgabe jedoch in eine Datei umleiten, wird das Ergebnis korrekt UTF-8 codiert. Beachten Sie, dass, wenn die UTF-8-Datei eine Stückliste enthält, die Stückliste als Teil der ersten Zeile betrachtet wird, wodurch eine Suche ausgelöst werden kann, die mit dem Zeilenanfang übereinstimmt.
Es ist möglich, UTF-8-Zeichen mit mehreren Bytes zu suchen, wenn Sie Ihre Suchzeichenfolge in eine UTF-8-codierte Suchdatei (ohne Stückliste) einfügen und die Option /G verwenden.,
Zeilenende
FINDSTR unterbricht Zeilen unmittelbar nach jedem <LF>. Das Vorhandensein oder Fehlen von <CR> hat keinen Einfluss auf Zeilenumbrüche.
Suche über Zeilenumbrüche
Wie erwartet, die .
regex Metacharacter nicht übereinstimmen <CR> oder <LF>. Es ist jedoch möglich, über einen Zeilenumbruch mit einer Befehlszeilensuchzeichenfolge zu suchen., Sowohl die<CR> als auch<LF> Zeichen müssen explizit übereinstimmen. Wenn eine mehrzeilige Übereinstimmung gefunden wird, wird nur die erste Zeile der Übereinstimmung gedruckt. FINDSTR kehrt dann zur 2. Zeile in der Quelle zurück und beginnt die Suche erneut – eine Art „Look Ahead“ – Funktion.
TEXT annehmen.,TXT hat diese Inhalte (könnte Unix-oder Windows-Stil sein)
AAABAA
Dann liefert dieses Skript
diese Ergebnisse
1:A2:A5:A
Die Suche über Zeilenumbrüche hinweg mit der Option /G:FILE ist ungenau, da die einzige Möglichkeit, <CR> oder <LF> ist über eine Regex-Zeichenklasse Bereichsausdruck, der die EOL-Zeichen Sandwiches.,
-
matches <LF>, but it also matches <TAB> and <0x0B>
-
matches <CR>, but it also matches <0x0C> and !
Note – the above are symbolic representations of the regex byte stream since I can’t graphically represent the characters.,
Die Antwort wurde in Teil 2 unten fortgesetzt…