Windows Batch prüfen ob variable beginnt mit, endet mit, enthält eine bestimmte Zeichenfolge
Ich versuche zu überprüfen, ob eine variable in einer batch-Datei beginnt mit "
enthält BETA
irgendwo und endet mit ")
.
Ist es möglich?
Und wenn ja, kann mir jemand helfen mit, dass?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wo ein Wille ist...
Setzen von Variablen mit unsymmetrischen
"
kann schwierig sein. Ich habe gerade es, ausgewogene und lopped off des letzten Zeichens (:llcheck
Eintrag : lop letzten und überprüfen.Essentiall, ich habe kopiert die variable in
var2
undvarvar
oder demo, was passiert, sollten diese variablenames eingestellt werden.Zwei Dateien erzeugt.
TEST1.TXT
enthält, die ersten und letzten 2 Zeichen vonvar
undTEST2.TXT
einfach"")
Vergleichen Sie die zwei - wenn Sie nicht identisch, dann wird die variable NICHT starten
"
und Ende")
Sonst gut - könnte einfach geschriebenvar
aus einer Datei und verwendetfindstr
zu findenbeta
, aber ich beschloss, senden Sie die AusgabeSET var
was sollte der InhaltALL
desvar*
Variablen in der formin findstr, finden startet (
/b
)var=
und herauszufinden, ob , DASS enthält den stringbeta
Die/i
wählt der groß-und Kleinschreibung. Wenn Sie möchten, speziellBETA
im OBEREN FALL, ändern Sie einfachbeta
zuBETA
und entfernen Sie die/i
.result
eingestellt istY
oderN
Angenommen die variable enthält keine Zeilenvorschübe oder Wagenrückläufe, dann ist alles, was benötigt wird ist ein einzelner Befehl "FINDSTR". Es hat begrenzte Unterstützung für reguläre Ausdrücke, das ist mehr als genug für dieses problem.
Nur TEST11 geht.
Den
/R
option erzwingt, dass der search-string, der als ein regulärer Ausdruck behandelt.Den
/X
option bedeutet, es muss eine genaue übereinstimmung sein - muss die gesamte Zeichenfolge in der Suchzeichenfolge entsprechen..*
ist die regex wildcard Ausdruck entsprechen, wird eine beliebige Zeichenfolge.Ich umleiten FINDSTR Ausgabe nach NUL, weil wir nicht brauchen, um die Linie zu sehen. Wir wollen einfach nur den return-code
FINDSTR erfordert Literale in doppelten Anführungszeichen maskiert werden als
\"
Verwendung verzögert die expansion, so dass Sie können sicher echo einen beliebigen Wert innerhalb der variable.
Benutze ich
&&
bedingt Maßnahmen ergreifen, wenn FINDSTR erfolgreich war, und||
bedingt Maßnahmen ergreifen, wenn FINDSTR gescheitert.Meine
:TEST
routine trägt den Namen der Variablen als einziges argument.Beachten Sie, dass in einigen Situationen die batch-parser erfordert, dass Sie auch die Flucht der doppelten Anführungszeichen als
^"
, also ein völlig entgangen Zitat Aussehen wird\^"
. Aber, dass die Komplikationsrate ist nicht notwendig in Ihrem Fall. Der FINDSTR-escape-Regeln sind eigentlich ein bisschen wackelig. Sehen Was sind die undokumentierten Funktionen und die Einschränkungen der Windows-Befehl "FINDSTR"? für mehr info.Mein test-code wird zwischen groß-und Kleinschreibung suchen. So
beta
nicht mitBETA
. Wenn Sie möchten, eine groß-und Kleinschreibung suchen, dann fügen Sie einfach die/I
option.EDIT: 2015-07-22
Weitere option, wenn, und nur wenn Sie wollen, um groß - /Kleinschreibung ignorieren, ist die Verwendung einer Kombination der Variablen expansion suchen/ersetzen-und ausbau substring-Operationen. Beide test10 und test11 pass unten.
Die erste IF prüft
beta
überall (groß-und Kleinschreibung). Die zweite IF-Prüfungen für"
am Anfang, und das Letzte, WENN Prüfungen für")
am Ende. Die einzige heikle Sache ist, herauszufinden, wie zu entkommen, der Vergleichs-string, wenn es eine ungerade Anzahl von Anführungszeichen.findstr /rx \".*BETA.*\")
? Ja, es ist eine alte Antwort, aber ich sehe nur einen link zu diesem Thema jetzt...Ausgabe:
Den Umgang mit unausgeglichenen zitiert (und mit anderen, speziellen Batch-Zeichen, in der Tat), ist die Verwendung Verzögerte Erweiterung: auf diese Weise die Anführungszeichen und Sonderzeichen, die nicht in der Befehlszeile analysiert wird.
Denken Sie daran, zu entkommen, mit ^ alle Rechte Klammern, der nicht schließenden Klammern der Befehl blockiert.
Einen einfachen Weg, um zu überprüfen, ob eine variable enthalten, die eine gegebene Zeichenkette zu beseitigen versuchen den string von variable-Wert: wenn das Ergebnis anders ist, als der ursprüngliche Wert, dann die variable, die die Zeichenfolge enthalten.
Antonio