Windows Batch prüft, ob Variable mit beginnt, mit einer bestimmten Zeichenfolge endet und diese enthält

8

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?

    
BrainStone 29.03.2013, 16:53
quelle

3 Antworten

4
%Vor%

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

sein sollte %Vor%

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

gesetzt     
Magoo 29.03.2013, 18:00
quelle
10

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 \"

mit Escapezeichen versehen werden

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.

    
dbenham 31.03.2013 15:04
quelle
2
%Vor%

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

    
Aacini 29.03.2013 18:49
quelle