In einer Batch-Datei habe ich eine Zeichenfolge abcdefg
. Ich möchte überprüfen, ob bcd
in der Zeichenfolge.
Leider scheinen alle Lösungen, die ich finde, eine Datei nach einem Teilstring zu durchsuchen , nicht nach einem String für einen Teilstring.
Gibt es dafür eine einfache Lösung?
Windows
undcmd
oder es istms-dos
. MS - DOS ist nicht Teil von Windows für eine seit langer Zeit.Antworten:
Ja, Sie können Ersetzungen verwenden und mit der ursprünglichen Zeichenfolge vergleichen:
Das
%str1:bcd=%
Bit ersetzt einbcd
Instr1
durch eine leere Zeichenfolge, wodurch es sich vom Original unterscheidet.Wenn das Original keine
bcd
Zeichenfolge enthält , ist die geänderte Version identisch.Das Testen mit dem folgenden Skript zeigt es in Aktion:
Und die Ergebnisse verschiedener Läufe:
Ein paar Anmerkungen:
if
Aussage ist das Fleisch dieser Lösung, alles andere ist Support.x
vor den beiden Seiten der Gleichung ist , um sicherzustellen , dass der Stringbcd
funktioniert in Ordnung. Es schützt auch vor bestimmten "falschen" Startzeichen.quelle
Sie können die Quellzeichenfolge an weiterleiten
findstr
und den Wert von überprüfen,ERRORLEVEL
um festzustellen, ob die Musterzeichenfolge gefunden wurde. Ein Wert von Null zeigt Erfolg an und das Muster wurde gefunden. Hier ist ein Beispiel:Wenn dies in CMD.EXE ausgeführt wird, erhalten wir:
quelle
Normalerweise mache ich so etwas:
Beispiel:
Ausgabe:
Ich weiß nicht, ob das der beste Weg ist.
quelle
Aus Gründen der Kompatibilität und Benutzerfreundlichkeit ist es häufig besser, FIND zu verwenden, um dies zu tun.
Sie müssen auch überlegen, ob Sie den Fall sensibel oder den Fall unempfindlich abgleichen möchten.
Die Methode mit 78 Punkten (ich glaube, ich habe mich auf den Beitrag von paxdiablo bezogen) stimmt nur mit der Groß- und Kleinschreibung überein. Sie müssen daher für jede mögliche Iteration, die Sie möglicherweise abgleichen möchten, eine separate Prüfung für jede Fallvariation durchführen.
(Was für ein Schmerz! Bei nur 3 Buchstaben bedeutet das 9 verschiedene Tests, um die Prüfung durchzuführen!)
Darüber hinaus ist es häufig vorzuziehen, die Befehlsausgabe, eine Variable in einer Schleife oder den Wert einer Zeigervariablen in Ihrem Stapel / CMD abzugleichen, was nicht so einfach ist.
Aus diesen Gründen ist dies eine bevorzugte alternative Methode:
Verwenden Sie: Finden Sie [/ I] [/ V] "Übereinstimmende Zeichen"
[/ I] (Groß- und Kleinschreibung wird nicht berücksichtigt) [/ V] (Darf die Zeichen NICHT enthalten)
Als einzelne Zeile:
Mehrzeilig:
Wie bereits erwähnt, ist dies ideal für Dinge, die nicht in Variablen enthalten sind, die auch das Ersetzen von Zeichenfolgen ermöglichen:
quelle
setlocal EnableExtensions
dannIF /I
Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung durchführen.Wenn Sie nach Präsenz suchen, ist dies die einfachste Lösung:
Dies funktioniert hervorragend, um die Ausgabe von Windows-Befehlen in eine boolesche Variable zu verschieben. Ersetzen Sie einfach das Echo durch den Befehl, den Sie ausführen möchten. Sie können Findstrs auch aneinanderreihen, um eine Anweisung mithilfe von Pipes weiter zu qualifizieren. EG für Servicesteuerung (SC.exe)
Dieser wertet die Ausgabe von SC Query für Windows Update Services aus, die als mehrzeiliger Text ausgegeben wird, findet die Zeile mit "state" und findet dann, ob das Wort "running" in dieser Zeile vorkommt, und legt die Fehlerstufe entsprechend fest.
quelle
SET STRING=abcdefgh SET SUBSTRING=bcd ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE FALSE) else (ECHO CASE TRUE)
Ich komme mit dieser Antwort wahrscheinlich etwas zu spät, aber die akzeptierte Antwort funktioniert nur, um zu überprüfen, ob eine "fest codierte Zeichenfolge" Teil der Suchzeichenfolge ist.
Für eine dynamische Suche müssten Sie Folgendes tun:
Hinweis: Sie können die beiden Variablen als Argumente verwenden.
quelle
Bessere Antwort war hier :
quelle
quelle
Die Lösungen, die eine Datei nach einem Teilstring durchsuchen , können auch einen String durchsuchen , z.
find
oderfindstr
.In Ihrem Fall besteht die einfache Lösung darin, eine Zeichenfolge in den Befehl einzufügen, anstatt einen Dateinamen anzugeben, z.
Groß- und Kleinschreibung beachten:
echo "abcdefg" | find "bcd"
Zeichenfolge der Zeichenfolge ignorieren:
echo "abcdefg" | find /I "bcd"
Wenn keine Übereinstimmung gefunden wird, erhalten Sie eine leere Antwort auf CMD und% ERRORLEVEL% auf 1 gesetzt
quelle