Ich versuche zu überprüfen, ob eine Variable in einer Batchdatei mit "
irgendwo BETA
beginnt und mit ")
endet.
Ist es möglich? Und wenn ja, kann mir jemand dabei helfen?
Wo ein Wille ist ...
Das Einstellen von Variablen mit unausgeglichenem "
kann schwierig sein. Ich habe es einfach balanciert und das letzte Zeichen abgeschnitten ( :llcheck
entry: lop last und check.
Essentiall, ich habe die Variable in var2
und varvar
kopiert, um zu demonstrieren, was passiert, wenn diese Variablennamen gesetzt sind.
Dann werden zwei Dateien generiert. TEST1.TXT
enthält das erste und letzte 2 Zeichen von var
und TEST2.TXT
simply "")
Vergleiche die beiden - wenn sie nicht identisch sind, dann startet die Variable NICHT "
und end ")
Ansonsten gut - könnte einfach var
out in eine Datei geschrieben haben und findstr
verwendet haben, um% zu finden co_de%, aber ich entschied, die Ausgabe von beta
zu senden, was der Inhalt von SET var
der Variablen ALL
in der Form
in findstr, Suche nach der startenden ( var*
) /b
und Feststellung, ob THAT die Zeichenfolge var=
enthält Die Option beta
wählt die Groß- und Kleinschreibung aus. Wenn du% CO_DE% in UPPER-CASE haben willst, ändere einfach /i
in BETA
und entferne beta
.
BETA
wird auf /i
oder result
Angenommen, Ihre Variable enthält keine Zeilen- oder Zeilenumbrüche, dann ist nur ein einziger FINDSTR-Befehl erforderlich. Es hat begrenzte Unterstützung für reguläre Ausdrücke, die für dieses Problem mehr als genug ist.
%Vor%Nur TEST11 wird übergeben.
Die Option /R
erzwingt, dass die Suchzeichenfolge als regulärer Ausdruck behandelt wird.
Die Option /X
bedeutet, dass es eine exakte Übereinstimmung sein muss - die gesamte Zeichenfolge muss mit der Suchzeichenfolge übereinstimmen.
.*
ist der Regex-Platzhalterausdruck, der mit einer beliebigen Zeichenfolge übereinstimmt.
Ich leite die FINDSTR-Ausgabe auf NUL um, weil wir die Zeile nicht sehen müssen. Wir wollen nur den Rückgabecode
FINDSTR erfordert, dass doppelte Anführungszeichen als \"
Verwenden Sie die verzögerte Erweiterung, damit Sie einen beliebigen Wert innerhalb der Variablen sicher wiedergeben können.
Ich verwende &&
, um eine Aktion auszuführen, wenn FINDSTR erfolgreich war, und ||
, um eine Aktion auszuführen, wenn FINDSTR fehlgeschlagen ist.
Meine :TEST
-Routine verwendet den Namen der Variablen als einziges Argument.
Beachten Sie, dass der Stapelparser in einigen Situationen erfordert, dass Sie das doppelte Anführungszeichen auch als ^"
entgehen, was bedeutet, dass ein vollständig entkoppeltes Anführungszeichen wie \^"
aussieht. Aber diese Komplikation ist in Ihrem Fall nicht erforderlich. Die FINDSTR Escape-Regeln sind eigentlich ein bisschen wackelig. Weitere Informationen finden Sie unter Welche nicht dokumentierten Funktionen und Einschränkungen des Windows FINDSTR-Befehls? finden Sie hier.
Mein Testcode unterscheidet zwischen Groß- und Kleinschreibung. So wird beta
nicht mit BETA
übereinstimmen. Wenn Sie eine Suche ohne Beachtung der Groß- und Kleinschreibung durchführen möchten, fügen Sie einfach die Option /I
hinzu.
BEARBEITEN: 2015-07-22
Eine weitere Option besteht nur dann, wenn Sie die Groß- und Kleinschreibung ignorieren möchten, indem Sie eine Kombination aus Such- / Ersetzungs- und Erweiterungs-Teilstringoperationen mit variabler Erweiterung verwenden. Sowohl test10 als auch test11 gehen weiter unten.
%Vor% Der erste IF prüft irgendwo beta
(Groß- / Kleinschreibung wird nicht berücksichtigt). Der zweite IF prüft am Anfang auf "
und der letzte IF prüft am Ende auf ")
. Die einzige knifflige Sache ist herauszufinden, wie man aus der Vergleichszeichenkette aussteigt, wenn sie eine ungerade Anzahl von Anführungszeichen hat.
Ausgabe:
%Vor%Die Art und Weise, mit unausgeglichenen Anführungszeichen umzugehen (und mit anderen speziellen Batch-Zeichen), ist die verzögerte Expansion: Auf diese Weise erscheinen die Anführungszeichen und Sonderzeichen nicht in der Kommandozeile.
>Denken Sie daran, mit ^ allen rechten Klammern zu entkommen, die keine Klammern von Befehlsblöcken schließen.
Eine einfache Möglichkeit zu überprüfen, ob eine Variable eine gegebene Zeichenfolge enthält, ist der Versuch, die Zeichenfolge aus dem Variablenwert zu entfernen: Wenn das Ergebnis vom ursprünglichen Wert abweicht, enthält die Variable die Zeichenfolge.
Antonio
Tags und Links windows cmd if-statement equals batch-file