2017-05-25 5 views
-3

Ich versuche regex aus einer Batch-Lauf zu verwendenLauf regex von Windows-Batch-

<zed>(.*?)<zed> 

Werte zu finden, die ich in einer Datei gespeichert haben

<process>34593845387<process> 
<zed>M567<zed> 
<encode>UTF16<encode> 

ich in der Lage bin zu tun, dass von Java nicht von Batch

+0

Windows-Batch/cmd verfügt über keine integrierte in der Einrichtung für regex Handhabung. Sie müssen ein anderes Befehlszeilendienstprogramm abrufen und es aus Ihrer Stapeldatei aufrufen oder eine andere Methode (z. B. Powershell) verwenden. – alroc

+2

Nicht wahr, findstr unterstützt Regex – Richard

+0

installieren [ACK] (https://beyondgrep.com/install/) –

Antwort

0

Sie müssen wahrscheinlich etwas wie Powershell oder ein anderes Werkzeug verwenden. Die Grundlagen dessen, was Sie im Batch bekommen können, werden nicht ausreichen. Sobald Sie das tun, werden Sie wahrscheinlich wollen ein regulärer Ausdruck wie:

<zed>([^<]+)< 

diese Weise, wenn später das Format ein wenig von Änderungen:

<zed>234<zed> 

zu

<zed>234< /zed> 

oder etwas, es wird immer noch funktionieren. Es ist mir schon einmal passiert :)

+0

@Noomak wenn diese Antwort geholfen hat, bitte akzeptieren Sie es :) – sniperd

+0

Keine Hilfe, danke – Noomak

0

Findstr kann technisch Regex verwenden, aber es ist auf Zeichensätze beschränkt und kann Capturing nicht verarbeiten.

Wenn Ihre Daten genau so aussehen (nichts links von <zed>), können Sie die Zeichenfolge mit < und > als Trennzeichen und den Wert von <zed> als zweiter Token in der Zeichenfolge tokenize.

for /F "tokens=1,2 delims=<>" %%A in (data.txt) do if "%%A"=="zed" set zed_value=%%B" 

Sie können dann auf die Variable mit %zed_value%. Wenn Sie mehrere Felder <zed> haben, enthält die Variable den Wert des letzten.

0

Warum nicht cscript verwenden, um Javascript Regex zu verwenden?

type data.txt | cscript //nologo match.js "<zed>(.*)<zed>" 

Wo match.js wie folgt definiert ist:

if (WScript.Arguments.Count() !== 1) { 
    WScript.Echo("Syntax: match.js regex"); 
    WScript.Quit(1); 
} 
var rx = new RegExp(WScript.Arguments(0), "i"); 
var matched = false; 
while (!WScript.StdIn.AtEndOfStream) { 
    var str = WScript.StdIn.ReadLine(); 
    if (str.match(rx)) { 
    WScript.Echo(str); 
    matched = true; 
    } 
} 
if (!matched) { 
    WScript.Quit(1); 
}