提取2个字符串

时间:2016-04-14 17:55:02

标签: batch-file

我想创建一个简单的(希望)Batch文件,它可以搜索XML文件并从2个字符串中提取内容。

XML文件始终包含以下内容:
<NAME>John Smith</NAME>

这将位于XML内部,但每次可能位于不同的位置/行。如果可能,我需要提取名称并将其变为变量。

编辑
到目前为止,我一直在使用findstr for /F "tokens=2 delims=<> %%a in ('findstr "<name>" C:\list.xml') do set name=%%a echo %name%这个名字可能是3或4个单词,有时包含 - 上述作品有时候只是在它自己独立的行上,但情况并非总是如此。

<NAME>John Smith</NAME>总是在一起并始终在同一条线上,但并不总是在它自己的单独一行上。

示例XML数据(全部在一行上)<?xml version="1.0" encousrng="UTF-8"?><usrsclib xmlns="urn:usrsclib"><usr:usrscinfo xmlns:usr="urn:GOT:-;usrscinfo"><usr:site><name>John Smith</name><usr:numSets>1</usr:numSets><usr:setNumber>1</usr:setNumber></usr:site><usr:description><usr:table><usr:siteName siteNumber="1">Main42</usr:siteName></usr:tableOfContents><usr:web href="www" /><usr:web href="www" /></usr:description><usr:city>hin</usr:city></usr:usrscinfo></usrsclib>

1 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q36630524.txt"
FOR /f "delims=" %%a IN ('FINDSTR /i /L /c:"<name>" "%filename1%"') DO SET "name=%%a"
SET "name=%name:*<name>=%"
FOR /f "delims=<" %%a IN ("%name%") DO set "name=%%a"
ECHO "%name%"
GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

我使用了一个名为q36630524.txt的文件,其中包含一些虚拟数据供我测试。

阅读文件,过滤包含字符串<name>的唯一行并分配给name

name的任意部分(包括字符串<name>,包括字符串findstr' to tokenise the resultant string using)设置为 nothing

使用as a delimiter. Assign token1 to&lt; (this will be the name part which precedes the string名称class MyClass { public: void hello(); };

显示结果。