Warum nicht diese FINDSTR Beispiel mit mehreren wörtlichen Suchbegriffen gefunden wird?
Den folgenden FINDSTR Beispiel nicht um eine übereinstimmung zu finden.
echo ffffaaa|findstr /l "ffffaaa faffaffddd"
Warum?
- möchten Sie wissen, was lustig? setzen Sie ein Leerzeichen nach
ffffaaa
und es funktioniert =D - Es muss nicht ein Raum sein, es könnte jedes beliebige Zeichen. Aber dann erstreckt sich die 2. search string durch ein Zeichen, und wenn der Fehler wieder Auftritt. Es scheint einen minimalen Größenunterschied notwendig für den Fehler angezeigt. Aber der minimale Unterschied ist nicht konstant. Ich habe eine Größe Unterschied von 2 scheitern.
- ...fand gerade ein weiteres Interessantes "Verhalten" von
findstr
: mit der/X
Schalter gegeben, eine Zeile muss exakt übereinstimmen, ausgegeben werden; wenn die Letzte Zeile in einer text-Datei für die Suche nicht beendet mit neue-Zeilefindstr
wird ihn nicht mehr zurück (egal ob/L
oder/R
gegeben ist, oder die such-Zeichenfolge vorangestellt ist/C:
)... - Ich habe bereits dokumentiert, dass ein Problem bei Was sind die undokumentierten Funktionen und die Einschränkungen der Windows-FINDSTR-Befehl?. Tatsächlich schlägt fehl, wenn die Zeile nicht enthalten ein carriage return (0x0D), auch wenn ein newline (0x0A) vorhanden ist.
- Die info ist unter der überschrift Regex-Line-Position die Anker ^ und $ und Positions-Optionen /B /E /X
Du musst angemeldet sein, um einen Kommentar abzugeben.
Offenbar ist dies eine langjährige FINDSTR bug. Ich denke, es kann eine lähmende Fehler, je nach den Umständen.
Habe ich bestätigt, der Befehl schlägt fehl, auf zwei verschiedenen Vista-Rechner, ein Windows 7-Rechner und ein XP-Rechner.
Ich fand diese findstr kaputt ??? link, der Berichte eine ähnliche Suche schlägt auf Windows Server 2003, aber es gelingt, auf Windows 2000.
Ich getan habe, eine Reihe von Experimenten, und es scheint, dass alle der folgenden Bedingungen erfüllt sein müssen, damit das Potenzial eines Fehlers:
/I
option)In der jeder Fehler die ich gesehen habe, es wird immer einer den kürzeren such-strings, der scheitert.
Ist es egal wie der Suchbegriff angegeben werden. Die gleiche fehlerhafte Ergebnis wird erreicht, indem mehrere
/C:"search"
Optionen und auch mit der/G:file
option.Nur 3 workarounds habe ich in der Lage zu kommen mit sind:
Verwenden Sie die
/I
option, wenn Sie nicht zu Fall. Offensichtlich ist dies möglicherweise nicht Ihre Bedürfnisse zu erfüllen.Verwenden Sie die
/R
regulären Ausdruck option. Aber wenn Sie das tun, dann müssen Sie sicherstellen, dass Sie entkommen, keine meta-Zeichen in der suchen, so dass es passt das Ergebnis erwartet eine direkte Suche. Dies kann problematisch sein, wie gut.Wenn Sie die
/V
option, dann verwenden Sie mehrere verrohrt FINDSTR-Befehle mit einem such-string statt einem FINDSTR mit mehreren Suchanfragen. Dies kann auch ein problem sein, wenn Sie eine Menge von Suchbegriffen, für die Sie möchten, verwenden Sie die/G:file
option.Ich hasse diese Fehler!!!!
Hinweis - Siehe Was sind die undokumentierten Funktionen und die Einschränkungen der Windows-Befehl "FINDSTR"? für eine umfassende Liste von FINDSTR Eigenheiten.
findstr
guru in viel die gleiche Weise Skeet ist der C# - guru 🙂findstr
- sagen Sie einfach NEIN!FIND
=(Ich kann nicht sagen, warum
findstr
kann fehlschlagen, mit mehreren literalen strings verwendet werden. Aber ich kann eine Methode zum umgehen der lästigen bug.Gegeben, dass die buchstäbliche Suche nach Zeichenfolgen in einer Textdatei aufgelistet namens
search_strings.txt
...:..., können Sie konvertieren Sie es in regulären Ausdrücken, indem Sie einen backslash vor jedes einzelne Zeichen:
Verwenden Sie dann die konvertierte Datei
regular_expressions.txt
...:...zu tun, eine Suche nach regulären Ausdrücken, das scheint zu funktionieren, auch mit mehreren Suchbegriffen:
Vorangehenden umgekehrten Schrägstriche einfach entkommen jedes Zeichen einschließlich derer, die eine bestimmte Bedeutung im regulären Ausdruck sucht.
Zeichen
<
und>
ausgeschlossen sind, die mit Escapezeichen versehen, um Konflikte zu vermeiden, mit dem Wort Grenzen, die wurden ausgedrückt durch\<
und\>
wenn die am Anfang und am Ende einer such-Zeichenfolge.Da reguläre Ausdrücke sind begrenzt auf 254 Zeichen für
findstr
letzten Versionen von Windows XP (im Gegensatz zu Zeichenketten, die sind beschränkt auf 511 Zeichen), die Länge der original-search-strings ist begrenzt auf 127 Zeichen, da jedes derartige Zeichen ausgedrückt, indem zwei Zeichen durch die Flucht.Hier ist ein alternativer Ansatz, der entgeht nur die meta-Zeichen
.
,*
,^
,$
,[
,]
,\
,"
:Der Vorteil dieser Methode ist, dass die Länge des such-strings ist nicht mehr begrenzt auf 127 Zeichen aber zu 254 Zeichen minus 1 für jede vorkommende genannten meta-Zeichen, die Anwendung für
findstr
letzten Versionen von Windows XP.Hier ist noch ein work-around, mit einem case-insensitive Suche mit
findstr
auf den ersten Platz, dann post-filtern Sie das Ergebnis, indem Sie groß-und Kleinschreibung Vergleiche:Den Doppel-Escape-Ausrufezeichen sorgen die variable
STR
erweitert, in dem explizit aufgerufencmd
Instanz auch im Falle verzögerte Erweiterung aktiviert ist, in der hosting -cmd
Instanz.Übrigens, wegen dem, was ich nenne ein design-Fehler, Suchanfragen mit literal-strings mit
findstr
nie zuverlässig funktioniert, sobald Sie umgekehrte Schrägstriche enthalten, denn solche können noch verzehrt werden, zu entkommen folgende meta-Zeichen, obwohl nicht notwendig, zum Beispiel für die Suche string\.
tatsächlich entspricht.
; wirklich passen\.
buchstäblich, müssen Sie die Suchzeichenfolge\\.
. Ich verstehe nicht, warum meta-Zeichen sind noch anerkannt, wenn dabei die wörtliche sucht, das ist nicht was ich Anruf-literal.