Es kann auf diese Weise durchgeführt werden (vorausgesetzt, Ihre Eingabe in der Datei "test1.html"):
findstr "<name>" test1.html > temp1.lis
FOR /F "tokens=2 delims=>" %%i in (temp1.lis) do @echo %%i > temp2.lis
FOR /F "tokens=1 delims=<" %%i in (temp2.lis) do @echo %%i > temp3.lis
Die erste Linie eine Wache, die nur HTML/XML-Tag "namen" in passen auf die beiden FOR-Zeilen (du darfst das schon getan haben) . Das Ergebnis wird in einer temporären Datei "temp1.lis" gespeichert.
Die zweite Zeile erfassen, was rechts von der ersten ">" - in der Tat was nach "< Name>" ist. Zu diesem Zeitpunkt ist "MyName </name" in der temporären Datei "temp2.lis" (als das schließende Tag enthält auch ">"). Notieren Sie die doppelte "%" s (%% i), da dies in einer BAT-Datei ist (wenn Sie direkt von der Kommandozeile aus testen wollen, dann sollte es nur ein "%" sein).
Die dritte Zeile capture, was links von der erste ist "<" - Dies ist das gewünschte Ergebnis: "MyName" (wird in "MyName </name" von "<" links). Das Ergebnis liegt in der Variablen %% i und Sie können eine Funktion mit %% i als Parameter aufrufen und auf das Ergebnis in dieser Funktion zugreifen (in der Zeile FOR über der Funktion war das eingebaute "echo" und das Ergebnis so endete in temporärer Datei "temp3.lis" durch die Umleitung von Standard Ausgabe von bis)
Beachten Sie, dass die oben funktioniert nur, wenn
<name>MyName</name>
der ersten HTML/XML-Tag in a Linie. Wenn das nicht der Fall ist oder Sie eine robustere Lösung wünschen, können Sie stattdessen eine Funktion in der ersten FOR-Zeile aufrufen (die empfängt %% i als ersten Parameter). Diese Funktion kann dann ersetzen "< Name>" mit einem einzelnen Zeichen, das Sie sind sicher ist nicht in der Eingabe, z.:
set RLINE=%MYLINE:<name>=£%
Erläuterung: wenn die Eingabezeile in Variable% MYLINE% ist dann "< name>" mit "£" ersetzt werden und wird das Ergebnis variable% RLINE% zugewiesen.
Der Grund für die Ersetzung ist, dass die Trennzeichen für die FOR-Schleife nur ein einzelnes Zeichen sind.
Sie dann „£“ als Trennzeichen in der FOR-Schleife verwenden können (zu extrahieren, was rechts von ist „< name>“ - wie vorher):
echo %RLINE%>temp5.lis
FOR /F "tokens=2 delims=£" %%i in (temp5.lis) do @echo %%i > temp6.lis
Sie haben, dies zu wiederholen Technik für "</name>" (aber nur wenn < Name> MyName </Name> ist nicht der erste HTML/XML-Tag in einer Zeile).
So wie Sie sehen, ist es möglich, aber ist ziemlich schmerzhaft.
Wenn Sie Code-ähnlichen Text in Backticks (das ''' Zeichen) einschließen, können Sie anzeigen, was Sie wörtlich eingeben. Dies wird Verwirrung vermeiden - ich musste Ihre Frage ein paar Mal lesen, um herauszufinden, dass Sie Klammern für spitze Klammern ersetzt haben. –